数字图像处理实验作业及代码

合集下载

matlab 数字图像处理实验报告(五份)

matlab 数字图像处理实验报告(五份)

《数字图像处理实验报告》实验一图像的增强一.实验目的1.熟悉图像在MATLAB下的读写、输出;2.熟悉直方图;3.熟悉图像的线性指数等;4.熟悉图像的算术运算和几何变换。

二.实验仪器计算机、MATLAB软件三.实验原理图像增强是指根据特定的需要突出图像中的重要信息,同时减弱或去除不需要的信息。

从不同的途径获取的图像,通过进行适当的增强处理,可以将原本模糊不清甚至根本无法分辨的原始图像处理成清晰的富含大量有用信息的可使用图像。

其基本原理是:对一幅图像的灰度直方图,经过一定的变换之后,使其成为均匀或基本均匀的,即使得分布在每一个灰度等级上的像素个数.f=H等或基本相等。

此方法是典刑的图像空间域技术处理,但是由于灰度直方图只是近似的概率密度函数,因此,当用离散的灰度等级做变换时,很难得到完全平坦均匀的结果。

频率域增强技术频率域增强是首先将图像从空间与变换到频域,然后进行各种各样的处理,再将所得到的结果进行反变换,从而达到图像处理的目的。

常用的变换方法有傅里叶变换、DCT变换、沃尔什-哈达玛变换、小波变换等。

假定原图像为f(x,y),经傅立叶变换为F(u,v)。

频率域增强就是选择合适的滤波器H(u,v)对F(u,v)的频谱成分进行处理,然后经逆傅立叶变换得到增强的图像。

四.实验内容及步骤1.图像在MATLAB下的读写、输出;实验过程:>> I = imread('F:\image\624baf9dbcc4910a.jpg');figure;imshow(I);title('Original Image');text(size(I,2),size(I,1)+15, ...'IMG_20170929_130307.jpg', ...'FontSize',7,'HorizontalAlignment','right');Warning: Image is too big to fit on screen; displaying at 25% > In imuitools\private\initSize at 86In imshow at 196Original Image2.给定函数的累积直方图。

数字图像处理实验报告 (图像编码)

数字图像处理实验报告 (图像编码)

实验三图像编码一、实验内容:用Matlab语言、C语言或C++语言编制图像处理软件,对某幅图像进行时域和频域的编码压缩。

二、实验目的和意义:1. 掌握哈夫曼编码、香农-范诺编码、行程编码2.了解图像压缩国际标准三、实验原理与主要框架:3.1实验所用编程环境:Visual C++6.0(简称VC)3.2实验处理的对象:256色的BMP(BIT MAP )格式图像BMP(BIT MAP )位图的文件结构:(如图3.1)图3.1 位图的文件结构具体组成图:单色DIB 有2个表项16色DIB 有16个表项或更少 256色DIB 有256个表项或更少 真彩色DIB 没有调色板每个表项长度为4字节(32位) 像素按照每行每列的顺序排列每一行的字节数必须是4的整数倍biSize biWidth biHeight biPlanes biBitCount biCompression biSizeImagebiXPelsPerMeter biYPelsPerMeter biClrUsedbiClrImportantbfType=”BM ” bfSizebfReserved1 bfReserved2 bfOffBits BITMAPFILEHEADER位图文件头 (只用于BMP 文件)BITMAPINFOHEADER位图信息头Palette 调色板DIB Pixels DIB 图像数据3.3 数字图像基本概念数字图像是连续图像(,)f x y 的一种近似表示,通常用由采样点的值所组成的矩阵来表示:(0,0)(0,1)...(0,1)(1,0)(1,1)...(1,1).........(1,0)(1,1)...(1,1)f f f M f f f M f N f N f N M -⎡⎤⎢⎥-⎢⎥⎢⎥⎢⎥----⎣⎦每一个采样单元叫做一个像素(pixel ),上式(2.1)中,M 、N 分别为数字图像在横(行)、纵(列)方向上的像素总数。

数字图像处理大作业报告

数字图像处理大作业报告

数字图像处理实验报告实验选题:选题二组员:学号:班级:指导老师:实验日期:2019年5月22日一、实验目的及原理1.识别出芯片的引脚2.熟悉并掌握opencv的某些函数的功能和使用方法原理:通过滤波、形态学操作得到二值图,再在二值图中设置条件识别引脚部分。

二、实现方案对图片滤波、调节阈值做边缘检测过滤掉一部分图片中干扰元素;然后通过膨胀、腐蚀操作来减少引脚的空心部分;再通过findContours()函数找到引脚的边缘并得到轮廓的点集,设置特定的长宽比和矩形面积识别引脚部分。

三、实验结果四、源码#include<iostream>#include<cmath>#include"opencv2/highgui/highgui.hpp"#include"opencv2/imgproc/imgproc.hpp"using namespace std;using namespace cv;int main(int argv, char **argc){//载入图片Mat srtImag = imread("2.jpg");Mat G_blur = srtImag.clone();//降噪blur(G_blur, G_blur, Size(5, 5));//imshow("降噪", G_blur);//Canny边缘检测Mat Canny_Imag = G_blur;Canny_Imag = Canny_Imag > 176;Canny(G_blur, Canny_Imag, 300, 50, 3);//imshow("边缘检测", Canny_Imag);//膨胀Mat element = getStructuringElement(MORPH_RECT, Size(10, 10));dilate(Canny_Imag, Canny_Imag, element);//imshow("膨胀", Canny_Imag);//腐蚀Mat element_1 = getStructuringElement(MORPH_RECT, Size(11, 11));erode(Canny_Imag, Canny_Imag, element_1);//imshow("腐蚀", Canny_Imag);//查找轮廓vector<vector<Point>>contours;vector<Vec4i>hierarchy;findContours(Canny_Imag, contours, hierarchy, RETR_CCOMP, CHAIN_APPROX_SIMPLE);vector<vector<Point>> contour_s(contours.size());//该数组共有contours.size()个轮廓的点集vector<Rect> Rec_s(contours.size());//逼近多边形的点集数组//获得每个轮廓点集的逼近多边形的点集for (size_t i = 0; i < contours.size(); i++) {approxPolyDP(Mat(contours[i]), contour_s[i], 3,false);//contour_s存储逼近多边形的点集Rec_s[i]= boundingRect(contour_s[i]); //Rec_s存储最小包围矩形的点集}//筛选合适长宽比的矩形并将其画出来Mat result_Imag = srtImag.clone();for (size_t j = 0; j < contours.size(); j++) {double as_ra;//长宽比as_ra = Rec_s[j].height / Rec_s[j].width;if (as_ra > 3.3 && as_ra < 9.3 && Rec_s[j].area() > 20) { rectangle(result_Imag, Rec_s[j], Scalar(0, 255, 255), 2, 7);}}imshow("result", result_Imag);waitKey(0);return 0;}五、总结经过这次实验,我熟悉了对blur()、Canny()、dilate()、erode()、findContours()、approxPolyDP()等函数的使用,了解了Rect类的构成等。

数字图像处理实验代码

数字图像处理实验代码

i = imread('C:\Documents and Settings\1\桌面\12.jpg')i = rgb2gray(i);>> figure(i)>> figure(2)>> subplot(2,2,1)>> imshow(i)>> title('原始灰度图像')>> j = ffshift(ff2(i));>> j = fftshift(fft2(i));>> jj = log(abs(j));>> subplot(2,2,2);>> imshow(jj,[ ]);title('原图像幅度谱')>> phase = (angle(j)*180/pi);>> subplot(2,2,3)>> imshow(phase)>> title('原图像相位谱')I = imread('C:\Documents and Settings\1\桌面\12.jpg');>> I=rgb2gray(I); % 将图像转为灰度图像figure(1), subplot(2,2,1);imshow(I); %显示灰度图片title('原始灰度图像');J=fftshift(fft2(I)); %傅立叶变换,并移频JJ=log(abs(J)); %取得幅度谱,其值较大,故取logsubplot(2,2,2);imshow(JJ,[ ]); %显示幅度谱,[ ]内参数可修改title('原图像幅度谱');[a,b]=size(J); %取出频谱尺度h=zeros(a,b);a0=round(a/2); %频谱的横向宽度,取整b0=round(b/2); %频谱的纵向宽度,取整d=30; %改变d 值,所的图像不同for i=1:afor j=1:bdistance=sqrt((i-a0)^2+(j-b0)^2);if distance<=dh(i,j)=1;elseh(i,j)=0; %构造出大小和频谱一致的滤波器hendendendJ1=h.*J; %滤波后频谱J1J2= log(abs(J1));subplot(2,2,3);imshow(J2,[ ])title('低通滤波后幅度谱');J3=ifft2(ifftshift(J1)); %逆傅立叶变换J4=uint8(abs(J3)); %将滤波图像转换成uint8 格式subplot(2,2,4); imshow(J4);title('低通滤波后图像')>>I = imread('C:\Documents and Settings\1\桌面\12.jpg');>> I=rgb2gray(I); % 将图像转为灰度图像figure(1), subplot(2,2,1);imshow(I); %显示灰度图片title('原始灰度图像');J=fftshift(fft2(I)); %傅立叶变换,并移频JJ=log(abs(J)); %取得幅度谱,其值较大,故取logsubplot(2,2,2);imshow(JJ,[ ]); %显示幅度谱,[ ]内参数可修改title('原图像幅度谱');[a,b]=size(J); %取出频谱尺度h=zeros(a,b);a0=round(a/2); %频谱的横向宽度,取整b0=round(b/2); %频谱的纵向宽度,取整d=50; %改变d 值,所的图像不同for i=1:afor j=1:bdistance=sqrt((i-a0)^2+(j-b0)^2);if distance>=dh(i,j)=1;elseh(i,j)=0; %构造出大小和频谱一致的滤波器hendendendJ1=h.*J; %滤波后频谱J1J2= log(abs(J1));subplot(2,2,3);imshow(J2,[ ])title('高通滤波后幅度谱');J3=ifft2(ifftshift(J1)); %逆傅立叶变换J4=uint8(abs(J3)); %将滤波图像转换成uint8 格式subplot(2,2,4); imshow(J4);title('高通滤波后图像')>>I = imread('C:\Documents and Settings\1\桌面\12.jpg');I = rgb2gray(I);I1=im2double(I); %转换成双精度类型T=dctmtx(8); %产生DCT 变换核B=blkproc(I1,[8 8],'P1*x*P2',T,T');mask=[1 1 1 1 0 0 0 01 1 1 0 0 0 0 01 1 0 0 0 0 0 01 0 0 0 0 0 0 00 0 0 0 0 0 0 00 0 0 0 0 0 0 00 0 0 0 0 0 0 00 0 0 0 0 0 0 0]; %构造出二值掩膜,仅保留左上角的十个DCT 低频系数B2=blkproc(B,[8 8],'P1.*x',mask); %将DCT 系数矩阵乘以二值掩膜I2=blkproc(B2,[8 8],'P1*x*P2',T',T); %反DCT 操作,得出处理后图像subplot(1,2,1),imshow(I1);subplot(1,2,2),imshow(I2);corr2(I1,I2); %求出原图像数据与处理后图像的相关性,越接近1 说明两者差别少ansI = imread('C:\Documents and Settings\1\桌面\12.jpg');I = rgb2gray(I);I1=im2double(I); %转换成双精度类型T=dctmtx(8); %产生DCT 变换核B=blkproc(I1,[8 8],'P1*x*P2',T,T');mask=[0 1 1 1 0 0 0 01 1 1 0 0 0 0 01 1 0 0 0 0 0 01 0 0 0 0 0 0 00 0 0 0 0 0 0 00 0 0 0 0 0 0 00 0 0 0 0 0 0 00 0 0 0 0 0 0 0]; %构造出二值掩膜,仅保留左上角的十个DCT 低频系数B2=blkproc(B,[8 8],'P1.*x',mask); %将DCT 系数矩阵乘以二值掩膜I2=blkproc(B2,[8 8],'P1*x*P2',T',T); %反DCT 操作,得出处理后图像subplot(1,2,1),imshow(I1);subplot(1,2,2),imshow(I2);corr2(I1,I2); %求出原图像数据与处理后图像的相关性,越接近1 说明两者差别少ans。

matabl数字图像处理

matabl数字图像处理

实验:1.实验目的1、理解图像退化模型。

2、掌握逆滤波器,维纳滤波器的使用。

2.实验内容1、任选一幅图像,模拟图像降质的过程。

2、给该图像加上任意一种噪声。

3、给这幅已经降质的图像利用逆滤波器,维纳滤波器分别进行复原。

3.程序代码和观察结果1.代码如下:I = imread('01.jpg');figure;imshow(I);title('原图像');运行后显示下图:对图像进行降质处理:PSF=fspecial('motion',40,75);MF=imfilter(I,PSF,'circular');noise=imnoise(zeros(size(I)),'gaussian',0,0.001);MFN=imadd(MF,im2uint8(noise));figure(2);imshow(MFN,[]);title('运动模糊图像');figure(2);imshow(MFN,[]);title('运动模糊图像')运行结果如下图:2.给图像加上噪声:模拟给原图加上高斯噪声:J = imnoise(I,'gaussian',0.02);imshow(J); title('高斯噪声后的图像');运行结果如下:3.1逆滤波处理:NSR=sum(noise(:).^2)/sum(MFN(:).^2);figure(3);imshow(deconvwnr(MFN,PSF,NSR),[]);title('逆滤波复原');运行结果如下:3.2 维纳滤波复原处理:imshow(deconvwnr(MFN,PSF,NSR),[]);title('维纳滤波复原');。

数字图像处理试验代码

数字图像处理试验代码
subPlot(2,4,1);Imshow(I);
subPlot(2,4,2);Imshow(J2);
subPlot(2,4,3);Imshow(S2);
subPlot(2,4,4);Imshow(J1);
subPlot(2,4,5);Imshow(S1);
subPlot(2,4,6);Imshow(J3);
[M,N]=size(C1);
fori=1:M
forj=1:N
if(C1(i,j)>0.1)
C1(i,j)=1;
else
C1(i,j)=0;
end
end
end
C4=mat2gray(C1);
subplot(2,3,5);imshow(C4);title('边缘');
end
ratio_delete=8/zippedHuffman;
zipped=num2str(zippedHuffman);压缩后的平均码长
disp(strcat('平均码长','=',zipped));
ad=num2str(ratio_delete);str2=strcat(ad,'%');
disp(strcat('压缩比','=',str2));
实验24
InImg=ImRead('D:\sy.jpg');
I=rgb2gray(InImg);
J1=Imnoise(I,'gaussian',0,0.01);S1=medfilt2(J1);
J2=Imnoise(I,'salt & pepper');S2=medfilt2(J2);

数字图像处理实验 实验二

数字图像处理实验 实验二

实验二MATLAB图像运算一、实验目的1.了解图像的算术运算在数字图像处理中的初步应用。

2.体会图像算术运算处理的过程和处理前后图像的变化。

二、实验步骤1.图像的加法运算-imadd对于两个图像和的均值有:推广这个公式为:其中,。

这样就可以得到各种图像合成的效果,也可以用于两张图像的衔接。

说明:两个示例图像保存在默认路径下,文件名分别为'rice.png'和'cameraman.tif',要求实现下图所示结果。

代码:I1 = imread('rice.png');I2 = imread('cameraman.tif');I3 = imadd(I1, I2,'uint8');I4 = imadd(I1, I2,'uint16');subplot(2, 2, 1), imshow(I1), title('Ô-ʼͼÏñ1');subplot(2, 2, 2), imshow(I2), title('Ô-ʼͼÏñ2');subplot(2, 2, 3), imshow(I3), title('8λͼÏñÏÔʾ');subplot(2, 2, 4), imshow(I4), title('16λͼÏñÏÔʾ');结果截图:2.图像的减法运算-imsubtract说明:背景图像可通过膨胀算法得到background = imopen(I,strel('disk',15));,要求实现下图所示结果。

数字图像处理——图像空余增强实验源代码及实验报告

数字图像处理——图像空余增强实验源代码及实验报告

试验一一, 实验目的上机实验是为训练学生的实际程序设计能力安排的、包含在教学课时内的教学内容。

实验目的是:1 , 进一步深入理解相关部分的基本概念和授课内容。

2, 进一步提高实际动手进行程序设计的能力。

二,实验要求(1), 熟悉Matlab软件、编程以及图像处理工具箱。

掌握Matlab的操作界面和基本操作流程掌握m文件的使用掌握Matlab关于图像的读入、输出的处理函数,比如:imread、imshow、figure、Subplot、imwrite、colormap(2), 利用图像处理工具箱进行空域图像增强实验利用Matlab的图像处理工具箱中提供的函数进行“点运算”利用Matlab的图像处理工具箱中提供的函数进行“算术运算”灰度切割、分段线性变换、位图切割:需要进行Matlab编程图像平均减少噪声:需要进行Matlab编程要求至少实现5个(包括5个)以上的,在课程中讲过的图像空域增强方法。

三,程序设计基本思想Matlab关于图像的读入,输出的处理函数以及matlab图像处理工具箱里的函数可在matlab中能直接调用,多做几个试验就能熟练掌握运用这几个函数;后面的需要用matlab编程来实现数字图像处理功能的试验需自己编写源程序,做完以上两个部分,这个试验就完成了。

四,原理概述a)学会调用matlab图像处理工具箱的函数,这个可以在matlab中直接试验。

b)第二部分,要求用matlab编程工具来实现图像的灰度切割,位图切割等功能。

(1),灰度切割的原理:灰度切割实际上是分段函数线性变换的一种处理方法,他所要实现的主要功能是变幻某一段灰度值的灰度值(将之变亮或变暗或根据要求做其他方面的变幻),编写源程序时只需提出带改变部分的灰度值,对其进行符合要求的变化即可。

(2),位图切割的原理:位图切割同样是分段线性变换的一种,不同的是文图切割中把一幅图像“分个八层”,每层都含有原图的部分信息,编写源代码时,可以去提出或除某一位图,显示出代表的信息。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

数字图像处理—实验一源程序:a=imread('rice.png');figure,imshow(a),title('原图');axis on;a=double(a)/256;figure,imhist(a),title('原直方图');axis on;r=[0:0.001:1];s1=[r<0.35].*r*0.3+[r<=0.65].*[r>=0.35].*(0.105+2.6333*(r-0.35))+[r>0.65].*( 1+0.3*(r-1));s2=[r<=0.5].*(r.^5)*15.9744+[r>0.5].*((r-0.5).^0.2+0.12);a1=[a<0.35].*a*0.3+[a<=0.65].*[a>=0.35].*(0.105+2.6333*(a-0.35))+[a>0.65].* (1+0.3*(a-1));a2=[a<=0.5].*(a.^5)*15.9744+[a>0.5].*((a-0.5).^0.2+0.12);figure,imshow(a1),title('改后一');axis on;figure,imhist(a1),title('改后直方图一');axis on;figure,plot(r,s1),title('变换函数一');axis on;figure,imshow(a2),title('改后二');axis on;figure,imhist(a2),title('改后直方图二');axis on;figure,plot(r,s2),title('变换函数二');axis on;imwrite(a1,'改后rice 一.jpg');imwrite(a2,'改后rice 二.jpg');b=imread('kids.tif');figure,imshow(b),title('原图');axis on;b=double(b)/256;figure,imhist(b);title('原直方图');axis on;s1=r.^0.6;s2=r.^0.4;s3=r.^0.3;b1=imadjust(b,[],[],0.6);b2=imadjust(b,[],[],0.4);b3=imadjust(b,[],[],0.3);figure,imshow(b1),title('改后一');axis on;figure,imhist(b1),title('改后直方图一');axis on;figure,plot(r,s1),title('变换函数一');axis on;figure,imshow(b2),title('改后二');axis on;figure,imhist(b2),title('改后直方图二');axis on;figure,plot(r,s2),title('变换函数二');axis on;figure,imshow(b3),title('改后三');axis on;figure,imhist(b3),title('改后直方图三');axis on;figure,plot(r,s3),title('变换函数三');axis on;imwrite(b1,'改后kids 一.jpg');imwrite(b2,'改后kids 二.jpg');imwrite(b3,'改后kids 三.jpg');c=imread('circuit.tif');figure,imshow(c),title('原图');axis on;c=double(c)/256;figure,imhist(c),title('原直方图');axis on;s=1-r;c=1-c;figure,imshow(c),title('变换后');axis on;figure,imhist(c),title('变换后直方图');axis on;figure,plot(r,s),title('变换函数');axis on;imwrite(c,'改后circuit.jpg');d=imread('rice.png');figure,imshow(d),title('原图');axis on;d=double(d)/256;figure,imhist(d),title('原直方图');axis on;r=[0:0.001:1];s=[r<=0.4].*[r>=0.2]*0.6;d=[d<=0.4].*[d>=0.2]*0.6+[d>0.4].*d+[d<0.2].*d;figure,imshow(d),title('变换后');axis on;figure,imhist(d),title('变换后直方图');axis on;figure,plot(r,s),title('变换函数');axis on;imwrite(d,'第二次改后rice.jpg');e=imread('Picture.jpg');e=e(:,:,1);e=im2double(e);figure,imshow(e),title('原图');axis on;figure,imhist(e),title('原直方图');axis on;r=[0:0.001:1];s=[r<0.3].*r*1.1+[r>0.65].*r*0.8+[r>=0.3].*[r<=0.65].*(0.11+r*1.5); e=[e<0.3].*e*1.1+[e>0.65].*e*0.8+[e>=0.3].*[e<=0.65].*(0.11+e*1.5); figure,imshow(e),title('变换后');axis on;figure,imhist(e),title('变换后直方图');axis on;figure,plot(r,s),title('变换函数');axis on;imwrite(e,'改后Picture.jpg');处理前后图像:结论:不同的灰度变换对最终图像的影响效果是不同的。

通过matlab灰度变化可以增加图像亮度,提高对比度,使视觉效果更好。

数字图像处理—实验二源代码:I1=imread('mountain.jpg');[J1,T1]=histeq(I1,256);figure,subplot(2,3,1),imshow(I1),title('原图');axis on;subplot(2,3,2),imhist(I1),title('原图直方图');axis on;subplot(2,3,4),imshow(J1),title('均衡化后图像');axis on;subplot(2,3,5),imhist(J1),title('均衡化后直方图');axis on;subplot(2,3,6),plot(T1),title('变换函数');axis on;I2=uint8(I1);r=0:1:255;n=([r<=5].*r*1400+[r>5].*[r<=20].*(7000-r*310)+[r>20].*[r<=180].*(900-r*5)...+[r>180].*[r<=225].*(r*8-1440)+[r>225].*[r<=255].*(3060-r.*12));[J2,T2]=histeq(I2,n);figure,subplot(2,3,1),imshow(I2),title('原图');axis on;subplot(2,3,2),imhist(I2),title('原图直方图');axis on;subplot(2,3,4),imshow(J2),title('规定化后图像');axis on;subplot(2,3,5),imhist(J2),title('规定化后直方图');axis on;subplot(2,3,6),plot(T2),title('变换函数');axis on;I3=im2double(I1);[m n]=size(I3);r1=zeros(1,256);p=r1;s1=r1;s2=r1;a=0;for k=1:256for i=1:mfor j=1:nif(I3(i,j)==((k-1)/255));r1(k)=r1(k)+1;endendendp(k)=r1(k)/65536;s1(k)=a+p(k);a=s1(k);s2(k)=round(s1(k)/(1/255))/255;end[m n]=size(I3);t=0;for k=1:256t=t+1;if( k==256||s2(k)~=s2(k+1))for i=1:mfor j=1:nif(I3(i,j)>=(k-t)/255&&I3(i,j)<=(k-1)/255)I4(i,j)=s2(k);endendendt=0;endendI3=mat2gray(I3);I4=mat2gray(I4);figure,subplot(2,3,1),imshow(I3),title('原图');axis on;subplot(2,3,2),imhist(I3),title('原图直方图');axis on;subplot(2,3,4),imshow(I4);title(' 自编函数均衡化');axis on; subplot(2,3,5);imhist(I4);title(' 自编函数均衡化后直方图');axis on; subplot(2,3,6),plot(s1),title('变换函数');axis on;处理前后图像:结论:直方图均衡化通过使用累积函数对灰度值进行“调整”以实现对比度的增强,通常用来增加许多图像的局部对比度,尤其是当图像的有用数据的对比度相当接近的时候。

相关文档
最新文档