数字图像处理实验报告图像压缩.docx
《数字图像处理实验报告图像压缩.docx》由会员分享,可在线阅读,更多相关《数字图像处理实验报告图像压缩.docx(10页珍藏版)》请在冰豆网上搜索。
数字图像处理实验报告图像压缩
竭诚为您提供优质文档/双击可除
数字图像处理实验报告图像压缩
篇一:
数字图像处理实验报告
数字图像处理
实验报告
课程:
班级:
学号:
姓名:
指导老师:
日期:
实验一
内容一mATLAb数字图像处理初步
一、实验目的与要求
1.熟悉及掌握在mATLAb中能够处理哪些格式图像。
2.熟练掌握在mATLAb中如何读取图像。
3.掌握如何利用mATLAb来获取图像的大小、颜色、高度、宽度等等相关信息。
4.掌握如何在mATLAb中按照指定要求存储一幅图像的方法。
5.图像间如何转化。
二、实验内容及步骤
1.利用imread()函数读取一幅图像,假设其名为flower.tif,存入一个数组中;解:
读取图像,存入数组I中:
I=imread(flower.tif);
2.利用whos命令提取该读入图像flower.tif的基本信息;
解:
查询数组I的信息:
3.利用imshow()函数来显示这幅图像;
解:
因为imshow()方法不能直接显示tif图像矩阵,因此要先转换成Rgb模式,再调用imshow()显示。
代码如下:
>>I1=I(:
:
1);
>>I2=I(:
:
2);
>>I3=I(:
:
3);
>>Rgb=cat(3,I1,I2,I3);
>>imshow(Rgb);
显示的图像为:
4.利用imfinfo函数来获取图像文件的压缩,颜色等等其他的详细信息;
解:
代码如下:
>>imfinfo(flower.tif)
结果截图:
5.利用imwrite()函数来压缩这幅图象,将其保存为一幅压缩了像素的jpg文件,设为flower.jpg;语法:
imwrite(原图像,新图像,‘quality’,q),q取0-100。
解:
代码:
>>imwrite(Rgb,flower.jpg,quality,80);
结果截图:
6.同样利用imwrite()函数将最初读入的tif图象另存为一幅bmp图像,设为flower.bmp。
解:
代码:
>>imwrite(Rgb,flower.bmp);
结果截图:
篇二:
数字图像处理实验报告(完整版)
数字图像处理
实验一mATLAb数字图像处理初步
一、显示图像
1.利用imread()函数读取一幅图像,假设其名为lily.tif,存入一个数组中;
2.利用whos命令提取该读入图像flower.tif的基本信息;
3.利用imshow()函数来显示这幅图像;
实验结果如下图:
源代码:
>>I=imread(lily.tif)
>>whosI
>>imshow(I)
二、压缩图像
4.利用imfinfo函数来获取图像文件的压缩,颜色等等其他的详细信息;
5.利用imwrite()函数来压缩这幅图象,将其保存为一幅压缩了像素的jpg文件,设为lily.jpg;语法:
imwrite(原图像,新图像,‘quality’,q),q取0-100。
6.同样利用imwrite()函数将最初读入的tif图象另存为一幅bmp图像,设为flily.bmp。
7.用imread()读入图像sunset.jpg和winter.jpg;
8.用imfinfo()获取图像sunset.jpg和winter.jpg的大小;
9.用figure,imshow()分别将sunset.jpg和winter.jpg显示出来,观察两幅图像的质量。
其中9的实验结果如下图:
源代码:
4~6(接上面两个)>>I=imread(lily.tif)
>>imfinfolily.tif;
>>imwrite(I,lily.jpg,quality,20);
>>imwrite(I,lily.bmp);
7~9>>I=imread(sunset.jpg);
>>J=imread(winter.jpg)
>>imfinfosunset.jpg
>>imfinfowinter.jpg
>>figure
(1),imshow(sunset.jpg)
>>figure
(2),imshow(winter.jpg)
三、二值化图像
10.用im2bw将一幅灰度图像转化为二值图像,并且用imshow显示出来观察图像的特征。
实验结果如下图:
源代码:
>>I=imread(lily.tif)
>>gg=im2bw(I,0.4);
F>>igure,imshow(gg)
原始图像:
四、思考题
(1)简述matLab软件的特点。
答:
①高效的数值计算及符号计算功能,能使用户从繁杂的数学运算分析中解脱出来;②具有完备的图形处理功能,实现计算结果和编程的可视化;
③友好的用户界面及接近数学表达式的自然化语言,使学者易于学习和掌握;
④功能丰富的应用工具箱(如信号处理工具箱、通信工具箱等),为用户提供了大量方便实用的处理工具。
(2)matLab软件可以支持哪些图像文件格式?
Jpeg、Jpeg、pcx、TIFF、png、gIF、hDF、xwD等等。
(3)说明函数imread的用途格式以及各种格式所得到图像的性质。
imread函数用于读入各种图像文件,其一般的用法为
[x,mAp]=imread(‘filename’,‘fmt’)
其中,x,mAp分别为读出的图像数据和颜色表数据,fmt为图像的格式,filename为读取的图像文件(可以加上文件的路径)。
(4)为什么用I=imread(‘lena.bmp’)命令得到的图像I不可以进行算术运算?
matlab系统默认的算术运算时针对双精度类型(double)的数据,而上述命令产生的矩阵的数据类型是无符号8位,直接进行运算会溢出。
实验二图像的代数运算
一.图像的加法运算
在mATLAb中,如果要进行两幅图像的加法,或者给一幅图像加上一个常数,可以调用imadd函数来实现。
imadd函数将某一幅输入图像的每一个像素值与另一幅图像相应的像素值相加,返回相应的像素值之和作为输出图像。
imadd函数的调用格式如下:
Z=imadd(x,Y)
其中,x和Y表示需要相加的两幅图像,返回值Z表示得到的加法操作结果。
实验结果如下图:
源代码:
I=imread(‘sunset.jpg’);
J=imread(‘bluehills.jpg’);
K=imadd(I,J);
imshow(K);(两幅图尺寸大小一致)
原始图像:
给图像的每一个像素加上一个常数可以使图像的亮度增加。
效果如下:
源代码
>>Rgb=imread(‘cameraman.tif’);
>>Rgb2=imadd(Rgb,50);
>>subplot(1,2,1);imshow(Rgb);
>>subplot(1,2,2);imshow(Rgb2);
二、图像的减法运算
在mATLAb中,使用imsubtract函数可以将一幅图像从另一幅图像中减去,或者从一幅图像中减去一个常数。
imsubtract函数将一幅输入图像的像素值从另一幅输入图像相应的像素值中减去,再将这个结果作为输出图像相应的像素值。
imsubtract函数的调用格式如下:
Z=imsubtract(x,Y);其中,Z是x-Y操作的结果。
实验结果如下图:
源代码
>>rice=imread(cameraman.tif)
>>background=imopen(rice,strel(disk,15))
>>rice2=imsubtract(rice,background)
>>subplot(1,2,1);imshow(rice);
>>subplot(1,2,2);imshow(rice2);
三、图像的乘法运算
在mATLAb中,使用immultiply函数实现两幅图像的乘法。
immultiply函数将两幅图像相应的像素值进行元素对元素的乘法操作(mATLAb点乘),并将乘法的运算结果作为输出图形相应的像素值。
immulitply函数的调用格式如下:
Z=immulitply(x,Y)其中,Z=x*Y。
实验结果如下图:
篇三:
数字图像处理实验报告
(一)
实验题目:
图像文件读取(js实现)
1.实验目的
使用javascript读取图像文件并显示出来(结合canva(:
数字图像处理实验报告图像压缩)s)
2.实验内容
1)加载图像文件,通过canvas读取图像的像素值并存入矩阵(或数组)
2)通过canvas写操作在页面中渲染像素
3.实验原理
hTmL5的canvas提供了getImageData接口来获取canvas中的数据,所以我们能够先用drawImage接口将图片画在canvas上然后再通过getImageData得到图片数据矩阵。
注意:
虽然Ie9开始支持了canvas接口,但是其getImageData获取的数据并不是以标准的TypedArray方式存储的,或者说Ie9没有提供对webgLnativebinarydata的支持,所以如果需要运行实例,浏览器版本需要更高的版本,推荐:
chrome10+,Ie10+,Firefox4+,opera11.64+,safari5.1+。
4.实验步骤
1)建立基本矩阵
在图像处理中,矩阵计算是非常重要的内容,所以我们首先来建立一个矩阵模型。
通过getImageData接口获取的ImageData虽然具有类似矩阵的结构,但是他的结构是不可变的,不适合扩展,所以我们选择在Javascript中自建一个矩阵。
代码如下:
functionmat(__row,__col,__data,__buffer){this.row=__row||0;this.col=__col||0;this.channel=4;this.buffer=__buffer||newArraybuffer(__row*__col*4);
}
说明:
this.data=newuint8clampedArray(this.buffer);__datathis.bytes=1;this.type="cV_RgbA";
row-代表矩阵的行数
col-代表矩阵的列数
channel-代表通道数量,因为通过getImageData获取的图片数据是以RgbA
色彩空间进行描述的,即有Red(红)、green(绿)、blue(蓝)和Alpha(不透明度)四个通道。
buffer-数据所用的Arraybuffer引用。
data-图片的uint8clampedArray数组数据。
bytes-每个数据单位占用字节,因为是uint8数据类型,所以占用字节数为1。
type-数据类型是cV_RgbA。
2)图片数据转成矩阵
functionimread(__image){varwidth=__image.width,height=__image.height;iResize(width,height);ictx.drawImage(__image,0,0);varimageData=ictx.getImageData(0,0,width,height),tempmat=newmat(height,width,imageData.data);imageData=null;
}ictx.clearRect(0,0,width,height);returntempmat;
注意:
这里的__image指的是Image对象,不是字符串uRL。
因为浏览器中Image的读取是一个异步过程,并不能立刻返回相应的mat对象,所以这个函数应当这样使用:
varimg=newImage();
img.onload=function(){
};
img.src="1.jpg";
ictx和iResize方法是一个全局变量,允许给其它函数公用,其中ictx表示canvas的2D画布,iResize用于调整画布的大小,具体代码略;
以上函数中出现的getImageData函数用于从canvas画布读取图像的像素:
数据以RgbA色彩格式返回的,即:
1)R:
红色像素的数值(大小)
2)g:
绿色像素的数值(大小)
3)b:
蓝色像素的数值(大小)
4)A:
Alpha通道的数值,代表图像的不透明度(大小)
语法:
context.getImageData(x,y,width,height);
例子:
red=imgData.data[0];//获取红色像素大小varmymat=imread(img);
green=imgData.data[1];
blue=imgData.data[2];
alpha=imgData.data[3];
3)矩阵转成图像数据
经过处理(灰度变换等)后的矩阵,需要一个方法变成ImageData,然后我们才可以通过putImageData方法在canvas上绘制经过处理的图像。
代码如下:
functionRgbA2ImageData(__imgmat){
varwidth=__imgmat.col,
height=__imgmat.row,
imageData=ictx.createImageData(width,height);
imageData.data.set(__imgmat.data);
returnimageData;
}
5.实验结果
截图如下:
代码如下: