第一篇:数字图像处理实验报告
目录
实验一: 数字图像的基本处理操作......................................................................................................2 1.1: 实验目的.........................................................................................................................................2 1.2:实验任务和要求...............................................................................................................................2 1.3:实验步骤和结果...............................................................................................................................2 1.4:结果分析...........................................................................................................................................6 实验二: 图像的灰度变换和直方图变换..............................................................................................7 2.1: 实验目的.........................................................................................................................................7 2.2:实验任务和要求...............................................................................................................................7 2.3:实验步骤和结果...............................................................................................................................7 2.4:结果分析.........................................................................................................................................11 实验三: 图像的平滑处理....................................................................................................................12 3.1: 实验目的.......................................................................................................................................12 3.2:实验任务和要求.............................................................................................................................12 3.3:实验步骤和结果.............................................................................................................................12 3.4:结果分析.........................................................................................................................................16 实验四:图像的锐化处理......................................................................................................................17 4.1: 实验目的.......................................................................................................................................17 4.2:实验任务和要求.............................................................................................................................17 4.3:实验步骤和结果.............................................................................................................................17 4.4:结果分析.........................................................................................................................................19
实验一:
数字图像的基本处理操作
1.1: 实验目的
1、熟悉并掌握MATLAB、PHOTOSHOP等工具的使用;
2、实现图像的读取、显示、代数运算和简单变换。
3、熟悉及掌握图像的傅里叶变换原理及性质,实现图像的傅里叶变换。
1.2:实验任务和要求
1.读入一幅RGB图像,变换为灰度图像和二值图像,并在同一个窗口内分成三个子窗口来分别显示RGB图像和灰度图像,注上文字标题。2.对两幅不同图像执行加、减、乘、除操作,在同一个窗口内分成五个子窗口来分别显示,注上文字标题。3.对一幅图像进行平移,显示原始图像与处理后图像,分别对其进行傅里叶变换,显示变换后结果,分析原图的傅里叶谱与平移后傅里叶频谱的对应关系。4.对一幅图像进行旋转,显示原始图像与处理后图像,分别对其进行傅里叶变换,显示变换后结果,分析原图的傅里叶谱与旋转后傅里叶频谱的对应关系。
1.3:实验步骤和结果
1.对实验任务1的实现代码如下: a=imread('d:tp.jpg');i=rgb2gray(a);I=im2bw(a,0.5);subplot(1,3,1);imshow(a);title('原图像');subplot(1,3,2);imshow(i);title('灰度图像');subplot(1,3,3);imshow(I);title('二值图像');subplot(1,3,1);imshow(a);title('原图像');
结果如图1.1 所示:
图1.1 原图及其灰度图像,二值图像 2.对实验任务2的实现代码如下: a=imread('d:tp.jpg');A=imresize(a,[800 800]);b=imread('d:tp2.jpg');B=imresize(b,[800 800]);Z1=imadd(A,B);Z2=imsubtract(A,B);Z3=immultiply(A,B);Z4=imdivide(A,B);subplot(3,2,1);imshow(A);title('原图像 A');subplot(3,2,2);imshow(B);title('原图像 B');subplot(3,2,3);imshow(Z1);title('加法图像');subplot(3,2,4);imshow(Z2);title('减法图像');subplot(3,2,5);imshow(Z3);title('乘法图像');subplot(3,2,6);imshow(Z2);title('除法图像');结果如图1.2所示:
3.对实验任务3的实现代码如下:
s=imread('d:tp3.jpg');i=rgb2gray(s);i=double(i);j=fft2(i);k=fftshift(j);
%直流分量移到频谱中心 I=log(abs(k));
%对数变换
m=fftshift(j);
%直流分量移到频谱中心 RR=real(m);
%取傅里叶变换的实部 II=imag(m);
%取傅里叶变换的虚部 A=sqrt(RR.^2+II.^2);A=(A-min(min(A)))/(max(max(A)))*255;b=circshift(s,[800 450]);b=rgb2gray(b);b=double(b);c=fft2(b);e=fftshift(c);I=log(abs(e));f=fftshift(c);WW=real(f);ZZ=imag(f);B=sqrt(WW.^2+ZZ.^2);B=(B-min(min(B)))/(max(max(B)))*255;subplot(2,2,1);imshow(s);title('原图像');subplot(2,2,2);imshow(uint8(b));title('平移图像');subplot(2,2,3);imshow(A);title('离散傅里叶变换频谱');subplot(2,2,4);imshow(B);title('平移图像离散傅里叶变换频谱');结果如图1.3所示:
4.对实验任务4的实现代码如下: s=imread('d:tp3.jpg');i=rgb2gray(s);i=double(i);j=fft2(i);k=fftshift(j);I=log(abs(k));m=fftshift(j);RR=real(m);II=imag(m);A=sqrt(RR.^2+II.^2);A=(A-min(min(A)))/(max(max(A)))*255;b=imrotate(s,-90);b=rgb2gray(b);b=double(b);c=fft2(b);e=fftshift(c);I=log(abs(e));f=fftshift(c);WW=real(f);ZZ=imag(f);B=sqrt(WW.^2+ZZ.^2);B=(B-min(min(B)))/(max(max(B)))*255;subplot(2,2,1);imshow(s);title('原图像');subplot(2,2,2);imshow(uint8(b));title('平移图像');subplot(2,2,3);imshow(A);title('离散傅里叶频谱');subplot(2,2,4);imshow(B);title('平移图像离散傅里叶频谱');结果如图1.4所示:
1.4:结果分析
对MATLAB软件的操作开始时不太熟悉,许多语法和函数都不会使用,写出程序后,调试运行,最开始无法显示图像,检查原因,是有些标点符号没有在英文状态下输入和一些其他的细节,学会了imread(),imshow(),rgb2gray()等函数。
实验二: 图像的灰度变换和直方图变换
2.1: 实验目的
1、熟悉及掌握图像的采样原理,实现图像的采样过程,进行图像的灰度转换。
2、理解直方图的概念及应用,实现图像直方图的显示,及通过直方图均衡对图像进行修正。
2.2:实验任务和要求
1、对一幅图像进行2倍、4倍、8倍和16倍减采样,显示结果。
2、显示一幅灰度图像a,改变图像亮度使其整体变暗得到图像b,显示两幅图像的直方图。
3、对一幅图像进行灰度变化,实现图像变亮、变暗和负片效果,在同一个窗口内分成四个子窗口来分别显示,注上文字标题。
4、对一副图像进行直方图均衡化,显示结果图像和对应直方图。
5、对一副图像进行如图所示的分段线形变换处理,试比较与直方图均衡化处理的异同。
2.3:实验步骤和结果
1.对实验任务1的实现代码如下:
a=imread('d:tp2.jpg');
b=rgb2gray(a);for m=1:4 figure [width,height]=size(b);quartimage=zeros(floor(width/(m)),floor(height/(2*m)));k=1;n=1;for i=1:(m):width for j=1:(2*m):height quartimage(k,n)=b(i,j);n=n+1;end k=k+1;n=1;end imshow(unit8(quartimage));end
结果如图所示:
2.对实验任务2的实现代码如下:
a=imread('d:tp2.jpg');c=rgb2gray(a);b=c-46;subplot(3,2,1);imshow(c);title('原图像')subplot(3,2,2);imhist(c);title('原图像的直方图')subplot(3,2,3);imshow(b);title('变暗后的图像')subplot(3,2,4);imhist(b);title('变暗后的图像直方图');d=imadjust(c,[0,1],[1,0]);subplot(3,2,5);imshow(d);title('反转图像');结果如图2.2所示:
3.对实验任务3的实现代码如下: a=imread('d:tp.jpg');m=imadjust(a,[,],[0.5;1]);%图像变亮 n=imadjust(a,[,],[0;0.5]);%图像变暗 g=255-a;%负片效果
subplot(2,2,1);imshow(a);title('原图像');subplot(2,2,2);imshow(m);title('图像变亮');subplot(2,2,3);imshow(n);title('图像变暗');subplot(2,2,4);imshow(g);title('负片效果');结果如图所示:
4.对实验任务4的实现代码如下:
b=imread('d:tp.jpg');c=rgb2gray(b);j=histeq(c);subplot(2,2,1),imshow(c);subplot(2,2,2),imshow(j);subplot(2,2,3),imhist(c);subplot(2,2,4),imhist(j);结果如图2.4所示:
5.对实验任务5的实现代码如下: x1=0:0.01:0.125;x2=0.125:0.01:0.75;x3=0.75:0.01:1;y1=2*x1;y2=0.25+0.6*(x2-0.125);y3=0.625+1.5*(x3-0.75);x=[x1,x2,x3];y=[y1,y2,y3];plot(x,y);结果如图所示:
2.4:结果分析
这次实验主要是对图像的灰度变换和直方图均衡化,实验内容包括灰度拉伸、图像反转、图像的二值化以及直方图均衡。通过实验将课本上理论知识加以实践,实验过程中明白了图像处理的一些技巧。但是以上几种方法采用的基本都是线性变换法,在实际应用中存在很多缺陷。它只能处理一些黑白分明的图像,而对于一些颜色丰富或者处理比较复杂图像时,往往于心不足。
实验三: 图像的平滑处理
3.1: 实验目的
1、熟悉并掌握常见的图像噪声种类;
2、理解并掌握常用的图像的平滑技术,如邻域平均法和中值滤波的原理、特点、适用对象。
3.2:实验任务和要求
1、读出lena.jpg这幅图像,给这幅图像分别加入椒盐噪声、高斯噪声和乘性噪声后并与前一张图显示在同一图像窗口中。
2、对受高斯噪声(模拟均值为0方差为0.02的高斯噪声)干扰的lena图像分别利用邻域平均法和中值滤波进行滤波去噪(窗口可变,可先取3*3,依次再取5*5,7*7),并显示滤波结果。
3、对受椒盐噪声(噪声方差为0.02)干扰的lena图像,选择合适的滤波器将噪声滤除。
4、对受乘性噪声(噪声方差为0.02)干扰的lena图像,选择合适的滤波器将噪声滤除。
3.3:实验步骤和结果
1.对实验任务1的实现代码如下:
>> I=imread('d:tp.jpg');>> i=rgb2gray(I);>> J=imnoise(i,'gaussian',0,0.02);%高斯噪声 >> K=imnoise(i,'salt & pepper',0.02);%椒盐噪声 >> P=imnoise(i,'speckle',0.02);%乘性噪声 >> subplot(2,2,1);imshow(i);>> xlabel('原图');>> subplot(2,2,2);imshow(J);xlabel('高斯噪声');>> subplot(2,2,3);imshow(K);xlabel('椒盐噪声');>> subplot(2,2,4);imshow(P);xlabel('乘性噪声');结果如图3.1所示:
2.对实验任务2的实现代码如下: >> I=imread('d:tp.jpg');>> i=rgb2gray(I);>> J=imnoise(i,'gaussian',0,0.02);>> K=im2double(J);>> h=fspecial('average');>> G1=filter2(h,K,'same');>> G2=medfilt2(K);>> subplot(2,2,1);imshow(1);>> subplot(2,2,1);imshow(i);>> xlabel('原图');>> subplot(2,2,2);imshow(J);>> xlabel('添加高斯噪声');>> subplot(2,2,3);imshow(G1);>> xlabel('均值滤波');>> subplot(2,2,4);imshow(G2);>> xlabel('中指滤波');结果如图3.2所示:
3.对实验任务3的实现代码如下: >> I=imread('D:tp.jpg');>> i=rgb2gray(I);>> J=imnoise(i,'salt & pepper',0.02);>> K=im2double(J);>> h=fspecial('average');>> G1=filter2(h,K,'same');>> G2=medfilt2(K);>> subplot(2,2,1);imshow(i);>> xlabel('原图');>> subplot(2,2,2);imshow(J);>> xlabel('添加椒盐噪声');>> subplot(2,2,3);imshow(G1);>> xlabel('均值滤波');>> subplot(2,2,4);imshow(G2);>> xlabel('中值滤波');结果如图3.3所示:
4.对实验任务4的实现代码如下: >> i=imread('D:tp.jpg');>> I=rgb2gray(i);>> J=imnoise(I,'speckle',0.02);>> K=im2double(J);>> h=fspecial('average');>> G1=filter2(h,K,'same');>> G2=medfilt2(K);>> subplot(2,2,1);imshow(I);>> xlabel('原图');>> subplot(2,2,2);imshow(J);>> xlabel('添加乘性噪声');>> subplot(2,2,3);imshow(G1);>> xlabel('均值滤波');>> subplot(2,2,4);imshow(G2);>> xlabel('中值滤波');结果如图3.4所示:
3.4:结果分析
(1)采用均值滤波器对图像处理能达到去噪的效果,并且一般滤波器的模板越大去噪效果越好,但是应该适中,当模板选择的过大时,处理的效果就会下降,因此我们应该根据具体的要求选择合适的模板来处理图像。
(2)采用高斯滤波器对图像处理能达到去噪的效果,与均值滤波器相同,随着所用的滤波器尺寸的增大,图像的细节锐化程度相应降低图像变得模糊起来。但相较于均值滤波器,其模糊程度较小。但是高斯滤波同时受到标准差 sigma 的影响。
(3)中值滤波对去除“椒盐”噪声可以起到很好的效果,因为椒盐噪声只在画面中的部分点上随机出现,所以根据中值滤波原理可知,通过数据排序的方法,将图像中未被噪声污染的点代替噪声点的值的概率比较大,因此噪声的抑制效果很好。中值滤波与均值滤波相比,在去除图像椒盐噪声的同时,还能够保持图像比较清晰的轮廓。从实验结果可以看出,通过3*3 的均值滤波器,图像中的噪声点有明显的消除。但是 3*3 的非线性模板中值滤波器上对噪声的滤除效果更完美。
实验四:图像的锐化处理
4.1: 实验目的
1、熟悉并掌握MATLAB图像处理工具箱的使用;
2、理解并掌握常用的图像的锐化技术。
4.2:实验任务和要求
1、采用三种不同算子对图像进行锐化处理。
2、锐化空间滤波
1)采用3×3的拉普拉斯算子w = [ 1, 1, 1;1 – 8 1;1, 1, 1]滤波
2)编写函数w = genlaplacian(n),自动产生任一奇数尺寸n的拉普拉斯算子,如5×5的拉普拉斯算子:
w =
[ 1
1] 3)分别采用5×5,9×9,15×15和25×25大小的拉普拉斯算子对blurry_moon.tif
2g(x,y)f(x,y)f(x,y)完成图像的锐化增强,进行锐化滤波,并利用式观察其有何不同,要求在同一窗口中显示。
4.3:实验步骤和结果
1.对实验任务1的实现代码如下:
>> i=imread('d:tp.jpg');>> I=rgb2gray(i);>> H=fspecial('sobel');>> I1=filter2(H,I);>> H=fspecial('prewitt');>> I2=filter2(H,I);>> H=fspecial('log');>> I3=filter2(H,I);>> subplot(2,2,1);imshow(i);title('原图像');>> subplot(2,2,2);imshow(I1);title('sobel算子锐化图像');>> subplot(2,2,3);imshow(I2);title('prewitt算子锐化图像');>> subplot(2,2,4);imshow(I3);title('log算子锐化图像');结果如图所示:
2.对实验任务2的实现代码如下: 1)
>> i=imread('D:tp.jpg');>> I=rgb2gray(i);>> T=double(I);>> subplot(1,2,1),imshow(T,[]);>> w=[1,1,1;1,-8,1;1,1,1];>> K=conv2(T,w,'same');>> subplot(1,2,2),imshow(K,[]);>> title('Lalacian Transformation');结果如图所示:
2)
function w = genlaplacian(n)
w=ones(n);
x=ceil(n/2);
w(x,x)=-1*(n*n-1);
end
3)w1=genlaplcaian(5);
I=imread(‘d:tp.jpg’);T=double(I);K=conv2(T,w1’same’);J=T-K;4.4:结果分析
通过对数字图像进行锐化处理,可以增强图像的边缘,使模糊的图像变得清晰起来,而以上几种方法都能很好的将图像的边缘变得清晰,但是要在不影响图像整体效果的情况下还是比较困难。综上所述,根据不同的情况可以需要选用不同的方法。在边缘检测中,常用的一种模板是Sobel 算子。Sobel 算子有两个,一个是检测水平边缘的 ;另一个是检测垂直边缘的。与Prewitt算子相比,Sobel算子对于象素的位置的影响做了加权,可以降低边缘模糊程度,因此效果更好。
第二篇:数字图像处理实验报告
实 验 报 告 书
系部学生专业班
实验
名称姓名名称 级时间:
: : :
:
实验一 直方图均衡
一、实验目的
在学习图像直方图的概念、计算方法、性质和相关应用基础上,生成、绘制图像的直方图,并应用MATLAB编程实现图像直方图均衡化程序。
二、实验内容
(1)计算并绘制图像直方图;
(2)编程实现图像的直方图均衡化处理,显示均衡前后的直方图和图像;
三、实验运行结果
四、实验中遇到的问题及解决方法
1、显示无法找到图像文件,应将图片与xx.m文件置于同一文件夹;
2、编程过程中应注意标点的输入法,应该用英文输入,否则会报错。
3、编程完成后运行时输入文件名与保存时文件名相同,区分大小写。
五、思考题
(1)、灰度直方图可以反映一幅图像的哪些特征? 答:
1、表征了图像的一维信息。只反映图像中像素不同灰度值出现的次数(或频数)而未反映像素所在位置。
2、与图像之间的关系是多对一的映射关系。一幅图像唯一确定出与之对应的直方图,但不同图像可能有相同的直方图。
3、子图直方图之和为整图的直方图。(2)均衡化后的直方图有何特点?
答:经直方图均衡化处理后,可以得到一副改善了质量的新图像。这幅图像的灰度层次将不再是呈黑暗色调的图像,而是一副灰度层次较为适中的、比原始图像清晰、明快得多的图像。处理的结果使图像更适合与人的视觉特征或机器的识别系统。
六、实验心得体会
本次实验中,因为初学这个软件,我学习到了在程序中关于图像的运用,以及也复习了课本上的许多知识,加深了对直方图均衡化的理解。
七、程序清单
clear all;I=imread('lena_gray_256.tif');%打开一幅灰度图像 [m,n]=size(I);p=m*n;J=imhist(I)./p;
%计算图像的归一化直方图 subplot(1,3,1),imshow(I); subplot(1,3,2),imhist(I,64); subplot(1,3,3),plot(J);
(2)直方图均衡化
clear all;Im=imread('region.jpg');J=histeq(Im);%均衡化 subplot(2,2,1);imshow(Im);title('原图');%显示原图 subplot(2,2,2);imhist(Im);title('原图直方图');%显示原图的直方图 subplot(2,2,3);imshow(J);title('均衡化结果');%显示均衡化后的图像 subplot(2,2,4);imhist(J);title('均衡化结果的直方图');%显示均衡化后的直方图
实验二 频域图像增强
一、实验目的
1、频域图像增强
2、掌握基于频域的图像增强方法。
二、实验内容
(1)编程实现图像的理想低通和高通滤波;(2)编程实现图像的巴特沃斯低通和高通滤波。
三、实验运行结果
四、实验中遇到的问题及解决方法
显示图像无法打开,最终查出来时图像格式弄错了。
五、思考题
分析为什么图像通过低通滤波器后变得模糊?为什么通过高通滤波器后得到锐化结果?
答:图像的精细结构及突变部分主要由高频成分起作用,故经低通滤波后图像的精细结构消失,变得模糊;经高通滤波后图像得到锐化。
六、实验心得体会
本实验中遇到很多问题及错误,例如图像打不开、处理后图像模糊等,都是经常容易发生的错误,最后实验几次,就能够逐一自己解决了。使自己对数字图像处理课程中的许多问题有了更实际和确切的深入了解。
七、程序清单
clc;clear;data4=imread('lena.gif');subplot(3,2,1);imshow(data4);title('原图');i=fft2(data4);subplot(3,2,2);i=fftshift(i);z=log(abs(i));x=0:1:255;y=0:1:255;[x,y]=meshgrid(x,y);mesh(z);%以三维坐标显示该图像频谱图title('原图频谱');[n,m]=size(i);%for k=1:1:n for l=1:1:m if(k^2+l^2)>=190^2 % result(k,l)=0;else result(k,l)=i(k,l);end end end subplot(3,2,4);
对该图进行低通滤波 选取D=190
z=log(abs(result));%三维方式显示低通滤波后的频谱图 x=0:1:255;y=0:1:255;[x,y]=meshgrid(x,y);mesh(z);title('理想低通滤波后的频谱');subplot(3,2,3);%新建图像显示窗口 result=fftshift(result);%滤波后的数据去中心化 b=ifft2(result);%逆傅里叶变换 imshow(uint8(abs(b)));title('理想低通滤波后的图像');subplot(3,2,6);%新建图像显示窗口 % [n,m]=size(c);%对原图进行高通滤波 for k=1:1:n for l=1:1:m if(k^2+l^2)<=190^2 %选取D=190 result(k,l)=0;else result(k,l)=i(k,l);end end end z=log(abs(result));x=0:1:255;%三维方式显示高通滤波前的频谱图 y=0:1:255;[x,y]=meshgrid(x,y);mesh(z);title('理想高通滤波后的频谱');subplot(3,2,5);result=fftshift(result);%滤波后的数据去中心化 d=ifft2(result);%逆傅里叶变换
imshow(uint8(abs(d)));title('理想高通滤波后的图像');%频域增强(巴特沃斯原型)
%二阶巴特沃斯(Butterworth)低通滤波器 %clc;%clear;Figure;J1=imread('lena.gif');subplot(3,2,1);imshow(J1);title('原图');f=double(J1);g=fft2(f);% 傅立叶变换 g=fftshift(g);% 转换数据矩阵 subplot(3,2,2);x=0:1:255;y=0:1:255;[x,y]=meshgrid(x,y);z=log(abs(g));%取幅度 mesh(z);%以三维坐标显示该图像频谱图 title('原图频谱');[M,N]=size(g);nn=2;% 二阶巴特沃斯(Butterworth)低通滤波器 d0=20;m=fix(M/2);n=fix(N/2);for i=1:M for j=1:N d=sqrt((i-m)^2+(j-n)^2);h=1/(1+0.414*(d/d0)^(2*nn));% 计算低通滤波器传递函数 result(i,j)=h*g(i,j);
end end subplot(3,2,4);x=0:1:255;y=0:1:255;[x,y]=meshgrid(x,y);z=log(abs(result));%取幅度 mesh(z);%以三维坐标显示该图像频谱图 title('低通滤波后的频谱');result=ifftshift(result);J2=ifft2(result);J3=uint8(abs(J2));subplot(3,2,3);imshow(J3);title('低通滤波后的图像');
%利用二阶巴特沃斯(Butterworth)高通滤波器
nn=2;% 二阶巴特沃斯(Butterworth)高通滤波器 d0=5;m=fix(M/2);n=fix(N/2);for i=1:M for j=1:N d=sqrt((i-m)^2+(j-n)^2);if(d==0)h=0;else h=1/(1+0.414*(d0/d)^(2*nn));% 计算传递函数 end result(i,j)=h*g(i,j);
end end subplot(3,2,6);x=0:1:255;y=0:1:255;[x,y]=meshgrid(x,y);z=log(abs(result));%取幅度 mesh(z);%以三维坐标显示该图像频谱图 title('高通滤波后的频谱');result=ifftshift(result);J2=ifft2(result);J3=uint8(abs(J2));subplot(3,2,5);imshow(J3);title('高通滤波后的图像');
实验三 图像边缘检测与连接
一、实验目的
图像边缘检测与连接
二、实验内容
(1)编程实现一阶差分边缘检测算法,包括Robert梯度算子、Prewitt算子、Sobel算子等;(2)编程实现二阶差分拉普拉斯边缘检测算法以及LoG检测法和Canny检测法;(3)分析与比较各种边缘检测算法的性能;
(4)编程实现Hough变换提取直线
(5)分析Hough变换检测性能;
三、实验运行结果
四、实验中遇到的问题及解决方法
拷贝文件后没改文件名,直接执行时出现错误,最后重新修改后重新编译,使之成功。
五、思考题
(1)边缘的方向是什么意思?为什么要考虑边缘的方向?
答:边缘常常意味着一个区域的终结和另一个区域的开始,图像的边缘也包含了物体的形状的重要信息,他不仅在分析图像时大幅度的减少了要处理的信息量,而且还保护了目标的边界结构。所以考虑边缘的方向很重要。
(2)Hough变换原理是什么?
答:Hough变换的基本原理在于利用点与线的对偶性,将原始图像空间的给定的曲线通过曲线表达形式变为参数空间的一个点。这样就把原始图像中给定曲线的检测问题转化为准找参数空间的峰值问题。也即把检测整体特性转化为检测局部特性。比如直线、椭圆、圆、弧线等。
六、实验心得体会
对于一些图像处理的函数不是很了解,只能够按课本的参照函数拷贝做实验,对于其中的一些函数问题理解不是很透彻,有些甚至完全不懂。还得继续努力。
七、程序清单
1、边缘检测
由edge函数实现各算子对图像的边缘检测
clear all;I = imread('d:office.bmp');I=rgb2gray(I);BW1 = edge(I,'sobel');
%利用Sobel算子进行边缘检测 BW2 = edge(I,'roberts');%利用roberts算子进行边缘检测 BW3 = edge(I,'prewitt');%利用prewitt算子进行边缘检测 BW4 = edge(I,'log');
%利用log算子进行边缘检测 BW5 = edge(I,'canny');
%利用canny算子进行边缘检测 subplot(2,3,1),imshow(I)subplot(2,3,2),imshow(BW1)subplot(2,3,3),imshow(BW2)subplot(2,3,4),imshow(BW3)
subplot(2,3,5),imshow(BW4)subplot(2,3,6),imshow(BW5)
2、边缘连接
使用Hough变换作线检测和连接
clear all;
RGB = imread('d:M_M.bmp');I=RGB;%I = rgb2gray(RGB);BW = edge(I,'canny');
% 利用Canny算子提取图像边缘 [H,T,R] = hough(BW,'RhoResolution',0.5,'ThetaResolution',0.5);figure(1), imshow(T,R,H,[],'notruesize'), axis on, axis normal xlabel('T'), ylabel('R')p = houghpeaks(H,5,'threshold',ceil(0.3*max(H(:))));
%找到5个较明显的Hough变换峰值
hold on plot(T(p(:,2)),R(p(:,1)),'s','color','white');lines = houghlines(BW,T,R,p,'FillGap',10,'MinLength',10);
%查找并链接线段
figure, imshow(BW), hold on %在二值图中叠加显示这些线段 for k = 1:length(lines)
xy = [lines(k).point1;lines(k).point2];
plot(xy(:,1),xy(:,2),'LineWidth',2,'Color','green');end
第三篇:数字图像处理实验报告
数字图像处理
实验报告
目录
1.数字图像处理简介
2.实验目的3.实验内容
4.实验结果及代码展示
5.算法综述
6.Matlab优势
7.总结
8.存在问题
一、数字图像处理简介
图像处理,是对图像进行分析、加工、和处理,使其满足视觉、心理以及其他要求的技术。图像处理是信号处理在图像域上的一个应用。目前大多数的图像是以数字形式存储,因而图像处理很多情况下指数字图像处理。此外,基于光学理论的处理方法依然占有重要的地位。
图像处理是信号处理的子类,另外与计算机科学、人工智能等领域也有密切的关系。
传统的一维信号处理的方法和概念很多仍然可以直接应用在图像处理上,比如降噪、量化等。然而,图像属于二维信号,和一维信号相比,它有自己特殊的一面,处理的方式和角度也有所不同。
二、实验目的
巩固所学知识,提高所学能力
三、实验内容
利用matlab的GUI程序设计一个简单的图像处理程序,并含有如下基本功能: 1.读入一幅RGB图像,变换为灰度图像和二值图像,并在同一个窗口内分成三个子窗口来分别显示RGB图像和灰度图像,注上文字标题 2.对给定图像进行旋转
3.对给定的图像添加噪声(椒盐噪声、高斯噪声)
四、实验结果及代码展示
1.软件设计界面
2.各模块功能展示以及程序代码
(1)读入一幅RGB图像,变换为灰度图像和二值图像,并在同一个窗口内分成三个子窗口来分别显示RGB图像和灰度图像,注上文字标题
效果展示:
代码:
a = imread('C:Documents and SettingsAdministrator桌面数字图像舞美.JPG');
i = rgb2gray(a);I = im2bw(a,0.5);
subplot(3,1,1);imshow(a);title('源图像')subplot(3,1,2);imshow(i);title('灰度图像')subplot(3,1,3);imshow(I);title('二值图像')
(2)图像旋转 原图
效果展示:
代码:
clc;clear all;close all;
Img=imread('D:My DocumentsMy Pictures5.JPG');Img=double(Img);[h w]=size(Img);alpha=pi/4;
wnew=w*cos(alpha)+h*sin(alpha);hnew=w*sin(alpha)+h*cos(alpha);wnew=ceil(wnew);
hnew=ceil(hnew);u0=w*sin(alpha);
T=[cos(alpha),sin(alpha);-sin(alpha),cos(alpha)];Imgnew2=zeros(hnew,wnew);Imgnew1=zeros(hnew,wnew);for u=1:hnew
for v=1:wnew
tem=T*([u;v]-[u0;0]);x=tem(1);y=tem(2);if x>=1&&x<=h&&y>=1&&y<=w x_low=floor(x);x_up=ceil(x);y_low=floor(y);y_up=ceil(y);if(x-x_low)<=(x_up-x)x=x_low;
else
x=x_up;
end
if(y-y_low)<=(y_up-y)y=y_low;
else
y=y_up;
end
p1=Img(x_low,y_low);p2=Img(x_up,y_low);p3=Img(x_low,y_low);p4=Img(x_up,y_up);s=x-x_low;t=y-y_low;Imgnew1(u,v)=Img(x,y);
Imgnew2(u,v)=(1-s)*(1-t)*p1+(1-s)*t*p3+(1-t)*s*p2+s*t*p4;end
end end
figure;imshow(Imgnew2,[]);B=imrotate(Img,alpha/pi*180);figure;imshow(B,[]);
(3)对给定的图像添加噪声(斑点噪声、高斯噪声)效果展示:
代码:
I= imread('D:My DocumentsMy Pictures5.JPG');figure,subplot(211);imshow(I);title('原图');J1=imnoise(I,'gaussian',0,0.02);
subplot(223);imshow(J);title('添加高斯噪声');J=imnoise(I,'speckle',0.04);
subplot(224);imshow(J);title('添加斑点噪声');
五、算法综述 灰度图像:
一幅完整的图像,是由红色、绿色、蓝色三个通道组成的。红色、绿色、蓝色三个通道的缩览图都是以灰度显示的。用不同的灰度色阶来表示“ 红,绿,蓝”在图像中的比重。通道中的纯白,代表了该色光在此处为最高亮度,亮度级别是255。
通道是整个Photoshop显示图像的基础。色彩的变动,实际上就是间接在对通道灰度图进行调整。通道是Photoshop处理图像的核心部分,所有的色彩调整工具都是围绕在这个核心周围使用的。
在计算机领域中,灰度数字图像是每个像素只有一个采样颜色的图像。这类图像通常显示为从最暗黑色到最亮的白色的灰度,尽管理论上这个采样可以任何颜色的不同深浅,甚至可以是不同亮度上的不同颜色。灰度图像与黑白图像不同,在计算机图像领域中黑白图像只有黑色与白色两种颜色;灰度图像在黑色与白色之间还有许多级的颜色深度。但是,在数字图像领域之外,“黑白图像”也表示“灰度图像”,例如灰度的照片通常叫做“黑白照片”。在一些关于数字图像的文章中单色图像等同于灰度图像,在另外一些文章中又等同于黑白图像。灰度图像经常是在单个电磁波频谱如可见光内测量每个像素的亮度得到的。
用于显示的灰度图像通常用每个采样像素 8 位的非线性尺度来保存,这样可以有 256 级灰度。这种精度刚刚能够避免可见的条带失真,并且非常易于编程。在医学图像与遥感图像这些技术应用中经常采用更多的级数以充分利用每个采样 10 或 12 位的传感器精度,并且避免计算时的近似误差。在这样的应用领域每个采样 16 位即 65536 级得到流行。
二值图像:
是指每个像素不是黑就是白,其灰度值没有中间过渡的图像。二值图像一般用来描述文字或者图形,其优点是占用空间少,缺点是,当表示人物,风景的图像时,二值图像只能描述其轮廓,不能描述细节。这时候要用更高的灰度级。
二值图像是每个像素只有两个可能值的数字图像。人们经常用黑白、B&W、单色图像表示二值图像,但是也可以用来表示每个像素只有一个采样值的任何图像,例如灰度图像等。
二值图像中所有的像素只能从0和1这两个值中取,因此在MATLAB中,二值图像用一个由0和1组成的二维矩阵表示。这两个可取的值分别对应于关闭和打开,关闭表征该像素处于背景,而打开表征该像素处于前景。以这种方式来操作图像可以更容易识别出图像的结构特征。二值图像操作只返回与二值图像的形式或结构有关的信息,如果希望对其他类型的图像进行同样的操作,则首先要将其转换为二进制的图像格式,可以通过调用MATLAB提供的im2bw()来实现。
二值图像经常出现在数字图像处理中作为图像掩码或者在图像分割、二值化和dithering的结果中出现。一些输入输出设备,如激光打印机、传真机、单色计算机显示器等都可以处理二值图像。
二值图像经常使用位图格式存储。
二值图像可以解释为二维整数格Z,图像变形处理领域很大程度上就是受到这个观点启发。
图像旋转:
图像旋转是指图像以某一点为中心旋转一定的角度,形成一幅新的图像的过程。当然这个点通常就是图像的中心。既然是按照中心旋转,自然会有这样一个属性:旋转前和旋转后的点离中心的位置不变.根据这个属性,我们可以得到旋转后的点的坐标与原坐标的对应关系。由于原图像的坐标是以左上角为原点的,所以我们先把坐标转换为以图像中心为原点。假设原图像的宽为w,高为h,(x0,y0)为原坐标内的一点,转换坐标后的点为(x1,y1)。那么不难得到: x1 = x0-w/2;y1 =-y0 + h/2;在新的坐标系下,假设(x0,y0)距离原点的距离为r,点与原点之间的连线与x轴的夹角为b,旋转的角度为a,旋转后的点为(x1,y1)
噪声:
是电路或系统中不含信息量的电压或电流。在工业与自然界中,存在着各种干扰源(噪声源),如大功率电力电子器件的接入、大功率用电设备的开启与断开、雷击闪电等都会使空间电场和磁场产生有序或无序的变化,这些都是干扰源(或噪声源)。这些源产生的电磁波或尖峰脉冲通过磁、电耦合或是通过电源线等路径进入放大电路,各种电气设备,形成各种形式的干扰。
斑点噪声:
斑点噪声是SAR成像系统的一大特色,源自基本分辨单元内地物的随机散射,在图像上表现为信号相关(如在空间上相关)的小斑点,它既降低了图像的画面质量,又严重影响图像的自动分割、分类、目标检测以及其它定量专题信息的提取。
SAR图像斑点噪声的去除一方面要抑制图像均匀区域斑点噪声,另一方面要保持图像边缘和纹理细节信息。SAR斑点噪声的抑制可通过非相干多视处理,也可使用空间域滤波实现。非相干多视处理会降低图像的地面分辨率。因此,涌现出了一系列空间域滤波方法,如均值滤波、中值滤波、Lee滤波、Kuan滤波、Frost滤波、Sigma滤波以及Gamma Map滤波等。但这类算法存在自身无法克服的矛盾:一方面为增强斑点去噪效果需选较大的滤波窗口,另一方面为保持图像的实际分辨率要求所选的窗口较小。
高斯噪声:
所谓高斯噪声是指它的概率密度函数服从高斯分布(即正态分布)的一类噪声。如果一个噪声,它的幅度分布服从高斯分布,而它的功率谱密度又是均匀分布的,则称它为高斯白噪声。高斯白噪声的二阶矩不相关,一阶矩为常数,是指先后信号在时间上的相关性。高斯白噪声包括热噪声和散粒噪声。
实验中是通过MATLAB自带的函数产生噪声,各函数如下: J1=imnoise(I,'salt & pepper',0.05);%添加椒盐噪声
J2=imnoise(I,'gaussian',0,0.03);
%添加均值为0,方差为0.03的高斯噪声。
六、Matlab优势
MATLAB是一个包含大量算法的集合。其可以快捷的实现用户所需的各种计算功能。函数中所使用的算法都是科研和工程计算中的最新研究成果,而前经过了各种优化和差错处理。在通常情况下,可以用它来代替底层编程语言,如C和C++。在计算要求相同的情况下,使用MATLAB的编程工作量会大大减少。MATLAB的这些函数集包括从最简单最基本的函数到诸如矩阵,特征向量、快速傅立叶变换的复杂函数。函数所能解决的问题其大致包括矩阵运算和线性方程组的求解、微分方程及偏微分方程的组的求解、符号运算、傅立叶变换和数据的统计分析、工程中的优化问题、稀疏矩阵运算、复数的各种运算、三角函数和其他初等数学运算、多维数组操作以及建模动态仿真等。图形处理功能
图形处理功能MATLAB自产生之日起就具有方便的数据可视化功能,以将向量和矩阵用图形表现出来,并且可以对图形进行标注和打印。高层次的作图包括二维和三维的可视化、图象处理、动画和表达式作图。可用于科学计算和工程绘图。新版本的MATLAB对整个图形处理功能作了很大的改进和完善,使它不仅在一般数据可视化软件都具有的功能(例如二维曲线和三维曲面的绘制和处理等)方面更加完善,而且对于一些其他软件所没有的功能(例如图形的光照处理、色度处理以及四维数据的表现等),MATLAB同样表现了出色的处理能力。同时对一些特殊的可视化要求,例如图形对话等,MATLAB也有相应的功能函数,保证了用户不同层次的要求。另外新版本的MATLAB还着重在图形用户界面(GUI)的制作上作了很大的改善,对这方面有特殊要求的用户也可以得到满足
模块集合工具箱
MATLAB对许多专门的领域都开发了功能强大的模块集和工具箱。一般来说,它们都是由特定领域的专家开发的,用户可以直接使用工具箱学习、应用和评估不同的方法而不需要自己编写代码。目前,MATLAB已经把工具箱延伸到了科学研究和工程应用的诸多领域,诸如数据采集、数据库接口、概率统计、样条拟合、优化算法、偏微分方程求解、神经网络、小波分析、信号处理、图像处理、系统辨识、控制系统设计、LMI控制、鲁棒控制、模型预测、模糊逻辑、金融分析、地图工具、非线性控制设计、实时快速原型及半物理仿真、嵌入式系统开发、定点仿真、DSP与通讯、电力系统仿真等,都在工具箱(Toolbox)家族中有了自己的一席之地。
七、总结
运用matlab软件对图像进行处理,让我巩固了之前所学的知识,同时也在这次作业中更加了解到matlab语言在生活中的运用环境和掌握这门语言的重要性
八、存在问题
1.在进行图像增强时要不要讲图像先进行平滑处理? 2.如何增加这个算法的准确度
3.在此次作业中,为何添加椒盐噪声时无法显示
第四篇:数字图像处理实验报告
数字图像处理
实验报告
班级:通信103 学号:201027201 姓名:计富威 指导教师:孙洁
实验一 MATLAB数字图像处理初步
一、实验目的与要求
1.熟悉及掌握在MATLAB中能够处理哪些格式图像。2.熟练掌握在MATLAB中如何读取图像。
3.掌握如何利用MATLAB来获取图像的大小、颜色、高度、宽度等等相关信息。
4.掌握如何在MATLAB中按照指定要求存储一幅图像的方法。5.图像间如何转化。
二、实验内容及步骤
1.利用imread()函数读取一幅图像,假设其名为”第一个.tif”,存入一个数组中;
>>I=imread('第一个.tif');2.利用whos命令提取该读入图像”第一个.tif”的基本信息; >>whos I 3.利用imshow()函数来显示这幅图像; >>imshow(I);
第一个.tif 4.利用imfinfo函数来获取图像文件的压缩,颜色等等其他的详细信息;
>>imfinfo('第一个.tif');5.利用imwrite()函数来压缩这幅图象,将其保存为一幅压缩了像素的jpg文件,设为flower.jpg;语法:imwrite(原图像,新图像,‘quality’,q), q取0-100。
>>imwrite(I,'第一个.jpg','quality',50)6.同样利用imwrite()函数将最初读入的tif图象另存为一幅bmp图像,设为flower.bmp。>>imwrite(I,'第一个.bmp');7.用imread()读入图像:Lenna256.jpg 和camemaman.jpg; >>b=imread('lena256.bmp');>>c=imread('cameraman.tif');8.用imfinfo()获取图像Lenna256.jpg和camemaman.jpg 的大小; >>imfinfo('lena256.bmp');>>imfinfo('cameraman.tif');9.用figure,imshow()分别将Lenna256.jpg和camemaman.jpg显示出来,观察两幅图像的质量。>>figure >>imshow(b);>>figure >>imshow(c);
(Lena256.jpg图像截图)
(cameraman.jpg图像截图)
10.用im2bw将一幅灰度图像转化为二值图像,并且用imshow显示出来观察图像的特征。>> d=im2bw(b);>>figure >>imshow(b);>>figure >>imshow(d);
(二值化截图)
三、实验总结
通过实验MatLab软件的基本使用有了基本的了解,学会了使用MatLab软件来读取一个特定格式的图像,并通过相关的命令语句对图像进行格式转换、图像压缩、二值化等的处理,掌握了利用MATLAB来获取图像的大小、颜色、高度、宽度等等相关信息,掌握在MATLAB中如何通过imshow()语句来读取图像等等。
第二 图像基本运算
一、实验目的
1.了解图像的算术运算在数字图像处理中的初步应用。2.体会图像算术运算处理的过程和处理前后图像的变化。
二、实验原理
图像的代数运算是图像的标准算术操作的实现方法,是两幅输入图像之间进行的点对点的加、减、乘、除运算后得到输出图像的过程。如果输入图像为A(x,y)和B(x,y),输出图像为C(x,y),则图像的代数运算有如下四种形式:
C(x,y)= A(x,y)+ B(x,y)C(x,y)= A(x,y)-B(x,y)C(x,y)= A(x,y)* B(x,y)C(x,y)= A(x,y)/ B(x,y)
三、实验步骤 1.图像的加法运算
在MATLAB中,如果要进行两幅图像的加法,或者给一幅图像加上一个常数,可以调用imadd函数来实现。imadd函数将某一幅输入图像的每一个像素值与另一幅图像相应的像素值相加,返回相应的像素值之和作为输出图像。imadd函数的调用格式如下:
Z = imadd(X,Y)首先读入两幅图像
>>a=imread('第二个原图1.jpg');>>b=imread('第二个原图2.jpg')通过一个加法操作:>> c=imadd(a,b);
给图像的每一个像素加上一个常数可以使图像的亮度增加。如截图
第一张为原图,第二张为亮度加50,第三张为亮度减50 2.图像的减法运算
在MATLAB中,使用imsubtract函数可以将一幅图像从另一幅图像中减去,或者从一幅图像中减去一个常数。imsubtract函数将一幅输入图像的像素值从另一幅输入图像相应的像素值中减去,再将这个结果作为输出图像相应的像素值。imsubtract函数的调用格式如下:
Z = imsubtract(X,Y); 读入一幅画后通过减法 >>a3=imsubtract(a,50);
3.图像的乘法运算
在MATLAB中,使用immultiply函数实现两幅图像的乘法。immultiply函数将两幅图像相应的像素值进行元素对元素的乘法操作(MATLAB点乘),并将乘法的运算结果作为输出图形相应的像素值。immulitply函数的调用格式如下:
Z = immulitply(X,Y)读入一幅图后通过乘法操作 >> a=imread('cameraman.tif');>> b=immultiply(a,1.5);
4.图像的除法运算
在MATLAB中使用imdivide函数进行两幅图像的除法。imdivide函数对两幅输入图像的所有相应像素执行元素对元素的除法操作(点除),并将得到的结果作为输出图像的相应像素值。imdivide函数的调用格式如下:
Z = imdivide(X,Y)读入一幅图后通过除法操作
四、实验总结
通过对图像的四则运算了结图像的不同变化过程,对软件的进一步使用也有了更加深刻的认识。
实验三 图像增强—空域滤波
一、实验目的
进一步了解MatLab软件/语言,学会使用MatLab对图像作滤波处理,使学生有机会掌握滤波算法,体会滤波效果。
了解几种不同滤波方式的使用和使用的场合,培养处理实际图像的能力,并为课堂教学提供配套的实践机会。
二、实验设备与软件
(1)IBM-PC计算机系统
(2)MatLab软件/语言包括图像处理工具箱(Image Processing Toolbox)
(3)实验所需要的图片
三、实验内容与步骤
a)调入并显示原始图像“原图像.jpg”。>>I=imread('原图像.jpg');b)利用imnoise命令在图像“原图像.jpg”上加入高斯(gaussian)噪声
>>J = imnoise(I,'gauss',0.02);
%添加高斯噪声 c)利用预定义函数fspecial命令产生平均(average)滤波器 d)分别采用3x3和5x5的模板,分别用平均滤波器以及中值滤波器,对加入噪声的图像进行处理并观察不同噪声水平下,上述滤波器处理的结果;
>>ave1=fspecial('average',3);
%产生3×3的均值模版 >>ave2=fspecial('average',5);
%产生5×5的均值模版 >>K = filter2(ave1,J)/255;
%均值滤波3×3 >>L = filter2(ave2,J)/255;
%均值滤波5×5 e)选择不同大小的模板,对加入某一固定噪声水平噪声的图像进行处理,观察上述滤波器处理的结果。
>>M = medfilt2(J,[3 3]);
%中值滤波3×3模板 >>N = medfilt2(J,[4 4]);
%中值滤波4×4模板
f)利用imnoise命令在图像Sample2-1.jpg 上加入椒盐噪声(salt & pepper)>>J = imnoise(I,'salt& pepper',0.02);
%添加椒盐噪声
四、实验总结
椒盐噪声是由图像传感器,传输信道,解码处理等产生的黑白相间的亮暗点噪声。椒盐噪声往往由图像切割引起,去除脉冲干扰及椒盐噪声最常用的算法是中值滤波。椒盐噪声是指两种噪声,一种是盐噪声,另一种是胡椒噪声。盐=白色,椒=黑色。前者是高灰度噪声,后者属于低灰度噪声。一般两种噪声同时出现,呈现在图像上就是黑白杂点。这点我们通过实验结果可以明显看到。中值滤波对于滤除图像的椒盐噪声非常有效。
实验四图像分割
一、实验目的
使用MatLab 软件进行图像的分割。使学生通过实验体会一些主要的分割算子对图像处理的效果,以及各种因素对分割效果的影响。
二、实验要求
要求学生能够自行评价各主要算子在无噪声条件下和噪声条件下的分割性能。能够掌握分割条件(阈值等)的选择。完成规定图像的处理并要求正确评价处理结果,能够从理论上作出合理的解释。
三、实验内容与步骤
(1)使用Roberts 算子的图像分割实验,使用的原图是cameraman.jpg,截图如下
(2)使用Prewitt 算子的图像分割实验 截图如下
(3)使用Sobel 算子的图像分割实验
(4)使用LoG(拉普拉斯-高斯)算子的图像分割实验
四、实验结果
对Roberts算子、Prewitt 算子、Sobel 算子、LoG(拉普拉斯-高斯)算子的运算对图像的结果有了基本的认识,加深学习效果。
实验五 形态学运算
1、实验目的
学习常见的数学形态学运算基本方法,了解腐蚀、膨胀、开运算、闭运算取得的效果,培养处理实际图像的能力,并为课堂教学提供配套的实践机会。
2、实验要求
利用MatLab工具箱中关于数学形态学运算的函数,计算本指导书中指定二值图像进行处理。
3、实验设备与软件
1.LC-PC计算机系统
2.MatLab软件/语言包括图像处理工具箱(Image Processing Toolbox)3.实验所需要的图片
4、实验内容与步骤
1.调入并显示图像“原图.jpg”; 2.调入并显示图像“原图.jpg”;
3.选取合适的阈值,得到二值化图像“原图.jpg”; >>bw = im2bw(I,level);
%二值化 4.设置结构元素;
5.对得到的二值图像“原图.jpg”进行腐蚀运算; >>BW2 = imerode(bw,SE1);
%腐蚀 6.对得到的二值图像“原图.jpg”进行膨胀运算; >>BW1 = imdilate(bw,SE);
%膨胀 7.对得到的二值图像“原图.jpg”进行开运算;
>>BW3 = bwmorph(bw, 'open');
%开运算 8.对得到的二值图像“原图.jpg”进行闭运算; >>BW4 = bwmorph(bw, 'close');
%闭运算 9.将两种处理方法的结果作比较;
五、实验总结
通过本次实验,学习了常见的数学形态学运算基本方法,了解腐蚀、膨胀、开运算、闭运算取得的效果,培养处理实际图像的能力,通过自己动手的实验,对课本上的知识有了更加深刻的理解。
第五篇:数字图像处理实验报告
实验一 数字图像的获取
一、实验目的
1、了解图像的实际获取过程。
2、巩固图像空间分辨率和灰度级分辨率、邻域等重要概念。
3、熟练掌握图像读、写、显示、类型转换等 matlab 函数的用法。
二、实验内容
1、读取一幅彩色图像,将该彩色图像转化为灰度图像,再将灰度图像转化为索引图像并显示所有图像。
2、编程实现空间分辨率变化的效果。
三、实验原理
1、图像读、写、显示 I=imread(‘image.jpg’)Imview(I)Imshow(I)Imwrite(I,’wodeimage.jpg’)
2、图像类型转换
I=mat2gray(A,[amin,amax]);按指定的取值区间[amin,amax]将数据矩阵 A 转化为灰度
图像 I,amin 对应灰度 0,amax 对应 1,也可以不指定该区间。
[x,map]=gray2ind(I,n);按指定的灰度级 n 将灰度图像转化为索引图像,n 默认为 64 I=ind2gray(x,map);索引图像转化为灰度图像 I=grb2gray(RGB);真彩色图像转化为灰度图像
[x,map]=rgb2ind(RGB);真彩色图像转化为索引图像 RGB=ind2rgb(x,map);索引图像转化为真彩色图像
BW=im2bw(I,level);将灰度图像转化为二值图像,level 取值在[0,1]之间
BW=im2bw(x,map,level);将索引图像转化为二值图像,level 取值在[0,1]之间 BW=im2bw(RGB,level);将真彩色图像转化为二值图像,level 取值在[0,1]之间
四、实验代码及结果
1、in=imread('peppers.png');i=rgb2gray(in);[x,map]=gray2ind(i,128);subplot(131),imshow(in)subplot(132),imshow(i)subplot(133),imshow(x),colormap(map)
、%空间分辨率变化的效果
clc,close all,clear i=imread('cameraman.tif');
i=imresize(i,[256,256]);i1=i(1:2:end,1:2:end);[m1,n1]=size(i)i2=i1(1:2:end,1:2:end);[m2,n2]=size(i2)i3=i2(1:2:end,1:2:end);[m3,n3]=size(i3)subplot(221),imshow(i),xlabel('256 x 256')subplot(222),imshow(i1),xlabel('128 x 128')subplot(223),imshow(i2),xlabel('64 x 64')subplot(224),imshow(i3),xlabel('32 x 32')256 x 25664 x 64128 x 12832 x 32
实验二
图像的几何变换
一、实验目的
掌握图像的基本几何变换的方法
1、图像的平移
2、图像的旋转
二、实验内容
练习用matalb命令实现图像的平移、旋转操作
1、.编写实现图像平移的函数
2、用imread命令从你的硬盘读取一幅256×256灰度图;
3、调用平移函数,将256×256灰度图平移100行200列,在同一个窗口中显示平移前和平移后的图像。
4、再开辟一个窗口,分别用最近邻插值法、双线性插值法实现图像顺势针旋转50°,显示在同一窗口中,并比较两种效果图(在报告中)
三、实验原理
提示:图片平移就是实现运算
x'10x0x ' y01y0y10011
x'xx0即:y'yy0
四、实验代码及结果
1、function [I]=hmove(i,x0,y0);%编写实现图像平移的函数hmove,平移量为 [r,c]=size(i);
%x0,y0,平移前图像矩阵为i,I(r+x0,c+y0)=0;
%平移后图像矩阵为I for x=1:r;
for y=1:c;
x1=x+x0;
y1=y+y0;
I(x1,y1)=i(x,y);
end;end;参考程序 subplot(2,2,1)imshow(RGB)subplot(2,2,3)gray1=rgb2gray(RGB);imagesc(gray1),colormap(gray);
subplot(2,2,2)I1=hmove(gray1,100,20);subimage(gray1),axis('image');subplot(2,2,4),imagesc(I1),colormap(gray),axis([1,700],[1,820]);
2、显示图像的傅立叶频谱 a=0:800;b=0:600;
%[x,y]=meshgrid([-20:0.2:20],[-20:0.2:20]); [x,y]=meshgrid(a,b); i=imread('hr.jpg'); I=rgb2gray(i);
subplot(1,2,1),subimage([0,800],[0,600],i); subplot(1,2,2); s=fft2(I,601,801); mesh(x,y,log(abs(s)));%图像的傅立叶幅度频谱以三维图形显示 colormap(hsv);
实验三 图像空域变换增强(1)
一、实验目的
1、掌握直方图均衡化算法。
2、巩固灰度变换、直方图修正、图像算术和逻辑运算等基础知识。
3、熟练掌握空域变换增强的matlab 相关函数用法,并能利用算法自己编写matlab 程序实现图像空域变换增强。
二、实验内容
1、用函数imcomplement 对灰度图像cameraman.tif 取反。
2、利用如下分段变换曲线对canmeraman.tif 做线性灰度变换。
3、利用直方图求取算法计算以及显示pout.tif 的直方图,并和imhist 函数生成的直方图作比较。
三、实验原理
在图像处理中,空域是指由像素组成的空间,空域增强方法是指直接作用于像素的增强方法。空域处理可以表示为:
g(x, y)=T[ f(x, y)]
j=imcomplement(i);对图像取反 imhist();显示图像的直方图 histeq();直方图均衡化函数
imnoise(I,type,parameters);给图像加噪声 bitand();图像位与运算 bitor();图像位或运算
四、实验代码与结果
1、i=imread('cameraman.tif');
j=imcomplement(i);subplot(121),imshow(i)subplot(122),imshow(j)
2、clear,close all,clc in1=imread('cameraman.tif');
f0=0;g0=0;f1=100;g1=60;f2=150;g2=220;f3=255;g3=255;figure,plot([f0,f1,f2,f3],[g0,g1,g2,g3])axis tight,xlabel('f'),ylabel('g')title('intensity transformation')r1=(g1-g0)/(f1-f0);b1=g0-r1*f0;r2=(g2-g1)/(f2-f1);b2=g1-r2*f1;r3=(g3-g2)/(f3-f2);b3=g2-r3*f2;[m,n]=size(in1);in2=double(in1);for i=1:m for j=1:n f=in2(i,j);g(i,j)=0;if(f>=0)&(f<=f1)g(i,j)=r1*f+b1;elseif(f>=f1)&(f<=f2)g(i,j)=r2*f+b2;elseif(f>=f2)&(f<=f3)g(i,j)=r3*f+b3;end end end figure,subplot(121),imshow(in1)subplot(122),imshow(mat2gray(g))
3、clc,clear,close all in=imread('pout.tif');[m,n]=size(in);num=zeros(1,256);% num 是每个灰度级对应的像素个数 p=zeros(1,256);% p 是每个灰度级出现的概率 for i=1:m for j=1:n num(1,in(i,j)+1)=num(1,in(i,j)+1)+1;% 统计个数 end end p=num./(m*n)% 求概率 x=1:256;subplot(121),plot(x,p),axis([1 256 0 0.06])subplot(122),imhist(in)
实验四 图像空域变换增强(2)
一、实验目的
1、掌握直方图均衡化算法。
2、巩固灰度变换、直方图修正、图像算术和逻辑运算等基础知识。
3、熟练掌握空域变换增强的matlab 相关函数用法,并能利用算法自己编写matlab 程序实现图像空域变换增强。实现频域线性变换,非线性变换增强
二、实验内容
1、利用直方图均衡化算法对图像pout.tif 进行增强运算。
2、对图像lena.jpg 作逻辑与和逻辑或运算。
三、实验原理
j=imcomplement(i);对图像取反 imhist();显示图像的直方图 histeq();直方图均衡化函数
imnoise(I,type,parameters);给图像加噪声 bitand();图像位与运算 bitor();图像位或运算
四、实验代码与结果
1、clear;close all;clc;tu=imread('pout.tif');% 输入图像
%tu=rgb2gray(tu);% 转换为灰度图像
N=zeros(1,256);% N 为原始图像各灰度级像素个数 P=zeros(1,256);% P 为原始成图像直方图
q=zeros(1,256);% q 为原始图像直方图累积分布函数
newN=zeros(1,256);% newN 为新生成图像各灰度级像素个数 newP=zeros(1,256);% newP 为新生成图像直方图
newq=zeros(1,256);% newq 为新生成图像直方图累积分布函数 [h w]=size(tu);new_tu=zeros(h,w);% 计算原始图像各灰度级像素个数 for x=1:h for y=1:w N(1,tu(x,y))=N(1,tu(x,y))+1;end end P=N./sum(N);% 计算原始直方图 P % 计算原始累积分布直方图 q(1,1)=P(1,1);for i=2:256 q(1,i)=q(1,i-1)+P(1,i);end % 计算原始直方图对应的新的灰度 t ,建立映射关系 for i=1:256 t(1,i)=floor(254*q(1,i)+1+0.5);end % 计算直方图均衡化后的新图 new_tu for x=1:h for y=1:w new_tu(x,y)=t(1,tu(x,y));end end % 统计新生成图像各灰度级像素个数 for x=1:h for y=1:w newN(1,new_tu(x,y))=newN(1,new_tu(x,y))+1;end end newP=newN./(h*w);% 计算新的灰度直方图 newP % 计算新生成图像累积分布直方图 newq(1,1)=newP(1,1);for i=2:256 newq(1,i)=newq(1,i-1)+newP(1,i);end % 显示信息
subplot(231),imshow(tu)subplot(232),plot(P),axis([1 256 0 0.06])subplot(233),plot(q),axis([1 256 0 1])subplot(234),imshow(new_tu,[])subplot(235),plot(newP),axis([1 256 0 0.06])subplot(236),plot(newq),axis([1 256 0
1])
2、clc,clear,close all in=imread('lena.jpg');in=rgb2gray(in);[m,n]=size(in);in=double(in);out1=ones(m,n)*255;out1(20:150,30:170)=0;chu1=zeros(m,n);chu1(20:150,30:170)=255;for i=1:m for j=1:n out2(i,j)=bitor(in(i,j),out1(i,j));chu2(i,j)=bitand(in(i,j),chu1(i,j));end end in=uint8(in);out1=uint8(out1);out2=uint8(out2);chu1=uint8(chu1);chu2=uint8(chu2);subplot(231),imshow(in)subplot(232),imshow(out1)subplot(233),imshow(out2)subplot(234),imshow(chu1)subplot(235),imshow(chu2)
实验五 图像滤波增强
一、实验目的
1、掌握各种空域和频域图像滤波增强算法已经模板运算的基本方法。
2、巩固卷积定理、滤波处理等基础知识。
3、熟练掌握空域和频域滤波增强的matlab 相关函数用法。
二、实验内容
1、利用均值滤波算法对已被噪声污染的图像rice.png 进行滤波除噪处理。、利用标准中值滤波算法对已被噪声污染的图像rice.png 进行滤波除噪处理。3、用prewitt 算子对图像cameraman.tif 进行锐化滤波处理。
三、实验原理
H=fspecial(type);H=fspecial(type,parameters);用于创建一个指定的滤波器模板,type 指滤波器的类型。
parameters 是与指定的滤波器有关的参数。Y=filter2(B,X);用于进行二维线性数字滤波,使用矩阵B 中的二维滤波器对数据X进行滤波。结果Y 是通过二维互相关计算出来的,大小与X 一样。
Y=filter2(B,X,’shape’);结果Y 的大小由参数shape确定,shape的取值如下: Full:返回二维户相关的全部结果,size(Y)>size(X)Same:返回二维户相关结果的中间部分,Y 的大小与X 相同 Valid:返回二维户相关未使用边缘补0 的部分,size(Y) 四、实验代码与结果 1、clc,clear in1=imread('rice.png');f=imnoise(in1,'salt & pepper',0.1);%f=imnoise(in1,'gaussian',0,0.02)%g 是标准均值滤波器的输出图像 g=biaozhunjunzhi(f,3);subplot(221),imshow(in1)%,xlabel('(a)原始图像')subplot(222),imshow(f)%,xlabel('(b)加噪图像')subplot(223),imshow(g)%,xlabel('(c)标准均值滤波图像')function g=biaozhunjunzhi(f,k)[m,n]=size(f);%f1 是对边缘像素补0 后得到的图像 f1=zeros(m+(k-1),n+(k-1));[m1,n1]=size(f1);%f1 的边缘像素值为0中间的像素值依然为f f1((1+(k-1)/2):(m1-(k-1)/2),(1+(k-1)/2):(n1-(k-1)/2))=f;%注意这条指令绝对不能少 ga=f;%取出窗口内的像素值并作标准均值滤波处理 for i=(k+1)/2:(m1-(k-1)/2) for j=(k+1)/2:(n1-(k-1)/2)a=0;x=1;for p=1:k for q=1:k a(x)=f1(i+(p-(k+1)/2),j+(q-(k+1)/2));x=x+1;end end %hsum 表示窗口内所有像素值的和 hsum=0;for h=1:(k^2)hsum=hsum+a(h);end ga(i,j)=round(hsum/(k^2));end end %ga 的大小和f1 的大小一致所以必须取出中间部分像素值作为输出 g=ga((1+(k-1)/2):(m1-(k-1)/2),(1+(k-1)/2):(n1-(k-1)/2)); 2、clc,clear in1=imread('rice.png');f=imnoise(in1,'salt & pepper',0.1);%f=imnoise(in1,'gaussian',0,0.02)%g 是标准中值滤波器的输出图像 g=biaozhunzhongzhi(f,3);subplot(131),imshow(in1)%,xlabel('(a)原始图像')subplot(132),imshow(f)%,xlabel('(b)加噪图像')subplot(133),imshow(g)%,xlabel('(c)标准均值滤波图像')function g=biaozhunzhongzhi(f,k)[m,n]=size(f);%f1 是对边缘像素补0 后得到的图像 f1=zeros(m+(k-1),n+(k-1));[m1,n1]=size(f1);%f1 的边缘像素值为0中间的像素值依然为f f1((1+(k-1)/2):(m1-(k-1)/2),(1+(k-1)/2):(n1-(k-1)/2))=f;%注意这条指令绝对不能少 ga=f;for i=(k+1)/2:(m1-(k-1)/2)for j=(k+1)/2:(n1-(k-1)/2)a=0;x=1;for p=1:k for q=1:k a(x)=f1(i+(p-(k+1)/2),j+(q-(k+1)/2));x=x+1; end end a=sort(a);ga(i,j)=a((k^2+1)/2);end end %ga 的大小和f1 的大小一致所以必须取出中间部分像素值作为输出 g=ga((1+(k-1)/2):(m1-(k-1)/2),(1+(k-1)/2):(n1-(k-1)/2)); 3、clc,clear,close all f=imread('cameraman.tif');[m,n]=size(f);g=f;h1=[-1-1-1;0 0 0;1 1 1];h2=[-1 0 1;-1 0 1;-1 0 1];x1=h1;x2=h2;for i=2:1:m-1 for j=2:1:n-1 sum1=0;sum2=0;sum=0;for p=1:1:3 for q=1:1:3 x1(p,q)=f(i+(p-2),j+(q-2));x2(p,q)=f(i+(p-2),j+(q-2));sum1=sum1+x1(p,q)*h1(p,q);sum2=sum2+x2(p,q)*h2(p,q);sum=sum1+sum2;end end if sum<1 g(i,j)=abs(sum);else g(i,j)=sum;end end end subplot(121),imshow(f)subplot(122),imshow(g) 实验六 图像复原 一、实验目的 1、掌握各种空域和频域图像滤波增强算法已经模板运算的基本方法。 2、巩固卷积定理、滤波处理等基础知识。 3、熟练掌握空域和频域滤波增强的matlab 相关函数用法并能利用算法自己编写matlab程序实现图像空域变换增强。 二、实验内容 利用大气湍流引起的图像退化模型对camerman.tif 进行退化和复原仿真,采用逆滤波的方法复原。利用匀速直线运动的图像退化模型对camerman.tif 进行退化和复原仿真,采用逆滤波的方法复原。根据逆谐波均值滤波器的输入输出方程对输入图像camerman.tif 进行空域滤波还原处理。 三、实验原理 Psf=fspecial(type,parameters);返回指定滤波器的单位冲击响应 Imfilter(c,psf,’circular’,’conv’);根据psf 对图像进行滤波处理 Fr=deconvwnr(g,psf,ncorr,icorr);对图像进行维纳滤波处理 Fr=deconvreg(g,psf,noisepower,range);对图像进行最小二乘方滤波处理 Tform=maketform(transform_type,transform_parameters);对图像进行几何失真校正 四、实验代码与结果 1、%基于大气湍流造成的模糊图像及其还原 clear;close all;clc in=imread('cameraman.tif');subplot(131),imshow(in),title('原始图像')f=fft2(in);[N1,N2]=size(f);k1=0.00005;%退化模型中的常数 %根据退化模型对输入图像进行退化处理并输出退化后的图像 for i=1:N1 for j=1:N2 h(i,j)=exp((-k1*(i^2+j^2))^(5/6));out(i,j)=f(i,j)*h(i,j);end end out1=ifft2(out);outreal=uint8(real(out1));subplot(132),imshow(outreal),title('大气湍流退化图')%根据退化模型对已经退化的图像进行恢复处理 k2=0.00006;%退化模型中的常数 for i=1:N1 for j=1:N2 h(i,j)=exp((-k2*(i^2+j^2))^(5/6));chu(i,j)=out(i,j)/h(i,j);end end chu1=ifft2(chu);chureal=uint8(real(chu1));subplot(133),imshow(chureal),title('大气湍流还原图') 2、%基于匀速直线运动造成的模糊图像及其还原 clear;close all;clc in=imread('cameraman.tif');%in=rgb2gray(in1);subplot(131),imshow(in),title('原始图像')f=fft2(in);[N1,N2]=size(f);t=1;a=0.06;b=0.04;pi=3.1415926;for u=1:N1 for v=1:N2 fenzhi=cos(pi*(u*a+v*b))-i*sin(pi*(u*a+v*b));h(u,v)=t*sin(pi*(u*a+v*b))*fenzhi/(pi*(u*a+v*b));out(u,v)=f(u,v)*h(u,v);end end out1=ifft2(out);outreal=uint8(real(out1));subplot(132),imshow(outreal),title('匀速直线运动退化图')for u=1:N1 for v=1:N2 h(u,v)=t*sin(pi*(u*a+v*b))*(cos(pi*(u*a+v*b))-j*sin(pi*(u*a+v*b)))/(pi*(u*a+v*b));chu(u,v)=out(u,v)/h(u,v);end end chu1=ifft2(chu);chureal=uint8(real(chu1)); subplot(133),imshow(chureal),title('匀速直线运动还原图') a=0.06;b=0;时的运行结果: a=0;b=0.06;时的运行结果:: 3、%逆谐波均值滤波举例 clc,close all,clear in=imread('cameraman.tif');f=imnoise(in,'gaussian',0,0.05);g=nixiebojunzhi(f,3);subplot(131),imshow(in)subplot(132),imshow(f)subplot(133),imshow(g)%逆谐波函数 function g=nixiebojunzhi(f,k)[m,n]=size(f);r=2;%r 为逆谐波函数中的Q 值 %f1 是对边缘像素补0 后得到的图像 f1=zeros(m+(k-1),n+(k-1));[m1,n1]=size(f1);%f1 的边缘像素值为0中间的像素值依然为f f1((1+(k-1)/2):(m1-(k-1)/2),(1+(k-1)/2):(n1-(k-1)/2))=f;%注意这条指令绝对不能少 ga=f;%取出窗口内的像素值并作标准均值滤波处理 for i=(k+1)/2:(m1-(k-1)/2)for j=(k+1)/2:(n1-(k-1)/2)a=0;x=1;for p=1:k for q=1:k a(x)=f1(i+(p-(k+1)/2),j+(q-(k+1)/2));x=x+1;end end %hsum 表示窗口内所有像素值的和 hsum1=0;hsum2=0;for h=1:(k^2)hsum1=hsum1+a(h)^(r+1);hsum2=hsum2+a(h)^r;end ga(i,j)=round(hsum1/hsum2);end end %ga 的大小和f1 的大小一致所以必须取出中间部分像素值作为输出 g=ga((1+(k-1)/2):(m1-(k-1)/2),(1+(k-1)/2):(n1-(k-1)/2)); 实验七 彩色图像处理 一、实验目的 1、了解三色成像及各种颜色模型。 2、能用处理灰度图像的算法和技术对真彩色图像进行增强、去噪、复原等处理。 3、理解伪彩色图像处理技术并掌握密度分层法、灰度级彩色变换法、频域滤波等伪彩色图像处理算法。 二、实验内容 1、生成一幅256x256 的RGB 图像,该图像左上角为红色,右上角为蓝色,左下角为绿色,右下角为黑色。 2、给彩色图像加噪并去噪,可以采用灰度图像去噪处理的任何方法。 3、密度分层伪彩色处理仿真。 4、灰度级-彩色变换法伪彩色处理仿真。 三、实验原理 B=cat(dim,A1,A2,A3,...),dim 为维数,cat 函数将A1,A2,A3 等矩阵连接成维数为dim的矩阵。 四、实验代码与结果 1、clc,clear,close all rin=zeros(256,256);%红色分量 rin(1:128,1:128)=1;%左上角 gin=zeros(256,256);%绿色分量 gin(129:256,1:128)=1;%左下角 bin=zeros(256,256);%蓝色分量 bin(1:128,129:256)=1;%右上角 %将三个分量进行组合 out1=cat(3,rin,gin,bin);%也可以不用matlab 函数 out2(:,:,1)=rin;out2(:,:,2)=gin;out2(:,:,3)=bin;subplot(121),imshow(out1)subplot(122),imshow(out2) 2、%给彩色图像加噪并去噪 clc,clear,close all in1=imread('peppers.png');in=imnoise(in1,'salt & pepper',0.8);out(:,:,1)=gaijinjunzhi(in(:,:,1),5);out(:,:,2)=gaijinjunzhi(in(:,:,2),5);out(:,:,3)=gaijinjunzhi(in(:,:,3),5);subplot(221),imshow(in1)subplot(222),imshow(in)subplot(223),imshow(out)%采用改进均值滤波算法,函数如下 function g=gaijinjunzhi(f,k)[m,n]=size(f);%f1 是对边缘像素补0 后得到的图像 f1=zeros(m+(k-1),n+(k-1));[m1,n1]=size(f1);%f1 的边缘像素值为0中间的像素值依然为f f1((1+(k-1)/2):(m1-(k-1)/2),(1+(k-1)/2):(n1-(k-1)/2))=f;%注意这条指令绝对不能少 ga=f;%取出窗口内的像素值并作改进均值滤波处理 for i=(k+1)/2:(m1-(k-1)/2)for j=(k+1)/2:(n1-(k-1)/2)a=0;x=1;for p=1:k for q=1:k a(x)=f1(i+(p-(k+1)/2),j+(q-(k+1)/2));x=x+1;end end mina=min(a);maxa=max(a);%tan 表示窗口内既不是最大也不是最小像素值的个数 %he 表示窗口内所有既不是最大也不是最小像素值的和 tan=0;he=0;%hsum 表示窗口内所有像素值的和 hsum=0;%取出不是最大也不是最小的像素值并求和以及个数 for h=1:(k^2)hsum=hsum+a(h);if a(h)~=mina & a(h)~=maxa tan=tan+1;he=he+a(h);else end end %在噪声密度较大的情况下有可能窗口内所有的值都是最大值或最小值 %对其进行判断,如果是这种情况,就采用普通的均值滤波算法求当前要求的像素点的值 if tan~=0 ga(i,j)=round(he/tan);else ga(i,j)=round(hsum/(k^2)); end end end %ga 的大小和f1 的大小一致,所以必须取出中间部分像素值作为输出 g=ga((1+(k-1)/2):(m1-(k-1)/2),(1+(k-1)/2):(n1-(k-1)/2)); 3、clc,clear,close all %[i0,map]=imread('trees.tif');d=[0.54,0.24,0.81;0.44,0.136,0.123;0.45,0.73,0.145;...0.21,0.12,0.56;0.45,0.54,0.33;0.33,0.23,0.141;...0.42,0.23,0.1;0.101,0.51,0.31;0.22,0.88,0.21;0.23,0.93,0.33];in=imread('pout.tif');[m,n]=size(in);for i=1:m for j=1:n % out(i,j,1)=map(in(i,j),1);% out(i,j,2)=map(in(i,j),2);% out(i,j,3)=map(in(i,j),3);ind=fix(in(i,j)/26);out(i,j,1)=d(ind,1);out(i,j,2)=d(ind,2);out(i,j,3)=d(ind,3);end end subplot(121),imshow(in)subplot(122),imshow(out) 4、clear,close all,clc in1=imread('moon.tif');%in1=rgb2gray(in1);%第一个独立的变换 f10=0;g10=0;f11=127;g11=0;f12=191;g12=255;f13=255;g13=255;figure(11),plot([f10,f11,f12,f13],[g10,g11,g12,g13],'r')axis tight,xlabel('f'),ylabel('g')title('intensity transformation')r11=(g11-g10)/(f11-f10);b11=g10-r11*f10;r12=(g12-g11)/(f12-f11);b12=g11-r12*f11;r13=(g13-g12)/(f13-f12);b13=g12-r13*f12;[m,n]=size(in1);in2=double(in1);for i=1:m for j=1:n f=in2(i,j);g1(i,j)=0;if(f>=0)&(f<=f11)g1(i,j)=r11*f+b11;elseif(f>=f11)&(f<=f12)g1(i,j)=r12*f+b12;elseif(f>=f12)&(f<=f13)g1(i,j)=r13*f+b13;end end end g1=uint8(g1);figure(12),subplot(121),imshow(in1)subplot(122),imshow(g1)%imshow(mat2gray(g1))%第二个独立的变换 f20=0;g20=0;f21=63;g21=255;f22=191;g22=255;f23=255;g23=0;figure(21),plot([f20,f21,f22,f23],[g20,g21,g22,g23],'r')axis tight,xlabel('f'),ylabel('g')title('intensity transformation')r21=(g21-g20)/(f21-f20);b21=g20-r21*f20;r22=(g22-g21)/(f22-f21);b22=g21-r22*f21;r23=(g23-g22)/(f23-f22);b23=g22-r23*f22;[m,n]=size(in1);in2=double(in1);for i=1:m for j=1:n f=in2(i,j);g2(i,j)=0;if(f>=0)&(f<=f21)g2(i,j)=r21*f+b21;elseif(f>=f21)&(f<=f22)g2(i,j)=r22*f+b22;elseif(f>=f22)&(f<=f23)g2(i,j)=r23*f+b23;end end end g2=uint8(g2);figure(22),subplot(121),imshow(in1)subplot(122),imshow(g2)%imshow(mat2gray(g2))%第三个独立的变换 f30=0;g30=255;f31=63;g31=255;f32=127;g32=0;f33=255;g33=0;figure(31),plot([f30,f31,f32,f33],[g30,g31,g32,g33],'r')axis tight,xlabel('f'),ylabel('g')title('intensity transformation')r31=(g31-g30)/(f31-f30);b31=g30-r31*f30;r32=(g32-g31)/(f32-f31);b32=g31-r32*f31;r33=(g33-g32)/(f33-f32);b33=g32-r33*f32;[m,n]=size(in1);in2=double(in1);for i=1:m for j=1:n f=in2(i,j);g3(i,j)=0;if(f>=0)&(f<=f31)g3(i,j)=r31*f+b31;elseif(f>=f31)&(f<=f32)g3(i,j)=r32*f+b32;elseif(f>=f32)&(f<=f33)g3(i,j)=r33*f+b33;end end end g3=uint8(g3);figure(32),subplot(121),imshow(in1)subplot(122),imshow(g3)%imshow(mat2gray(g3))%彩色合成 for i=1:m for j=1:n out(i,j,1)=g1(i,j);out(i,j,2)=g2(i,j);out(i,j,3)=g3(i,j);end end figure,imshow(out) 实验八 图像检测与分割 一、实验目的 1、了解图像的实际获取过程。 2、巩固图像空间分辨率和灰度级分辨率、邻域等重要概念。 3、熟练掌握图像读、写、显示、类型转换等matlab 函数的用法。 二、实验内容 1、应用一阶算子roberts 检测边缘。 2、用一阶算子sobel 检测边缘并对边界处的像素进行处理。 3、用上面描述的Otsu 算法编写matlab 程序实现图像分割。 三、实验原理 [g,t]=edge(image,method,threshold,direction)其中image 为输入图像method 为采用的方法类型:threshold 为阈值,如果给定阈值,则t= threshold,否则有函数自动计算出来并把其值返回给t;direction 为所寻找边缘的方向,其值可以为horizontal,vertical,both 默认为both;g 为返回的二值图像。 四、实验代码与结果 1、clc,clear,close all f=imread('lena.jpg');t=50;g=robertsf(f,t);subplot(121),imshow(f),title('原图')subplot(122),imshow(g),title('roberts 算子')%用roberts 算子对图像进行边缘检测的函数 function g=robertsf(f,t)[m,n]=size(f);g=f;h1=[-1 0;0 1];h2=[0-1;1 0];x1=h1;x2=h2;for i=2:1:m-1 for j=2:1:n-1 sum1=0;sum2=0;sum=0;for p=1:2 for q=1:2 x1(p,q)=f(i+(p-2),j+(q-2));x2(p,q)=f(i+(p-2),j+(q-2));sum1=sum1+x1(p,q)*h1(p,q);sum2=sum2+x2(p,q)*h2(p,q);sum=(sum1^2+sum2^2)^(1/2);end end if sum else end end end 2、clc,clear,close all f=imread('cameraman.tif');k=3;[m,n]=size(f);b1=[-1-2-1 0 0 0 1 2 1];b2=[-1 0 1-2 0 2-1 0 1];t=150;%f1 是对边缘像素补0 后得到的图像 f1=zeros(m+(k-1),n+(k-1));[m1,n1]=size(f1);%f1 的边缘像素值为0中间的像素值依然为f f1((1+(k-1)/2):(m1-(k-1)/2),(1+(k-1)/2):(n1-(k-1)/2))=f;%注意这条指令绝对不能少 ga=f1;%取出窗口内的像素值并作标准均值滤波处理 for i=(k+1)/2:(m1-(k-1)/2)for j=(k+1)/2:(n1-(k-1)/2)a=0;%a 是一维数组1xk^2 x=1;%x 是数组的序号 for p=1:k for q=1:k a(x)=f1(i+(p-(k+1)/2),j+(q-(k+1)/2));x=x+1;end end sum1=0;sum2=0;for w=1:k^2 sum1=sum1+a(w)*b1(w);sum2=sum2+a(w)*b2(w);end sum=(sum1^2+sum2^2)^(1/2); if sum 3、%利用Otsu 法阈值选择的方法分割图像 clc,clear,close all k=8;%k 表示无符号整型数的位数 L=2^k;in=imread('pout.tif');[m,n]=size(in);num=zeros(1,256);% num 是每个灰度级对应的像素个数 p=zeros(1,256);% p 是每个灰度级出现的概率 %p=zeros(1,256);% q 是每个灰度级出现的概率的累积分布函数 for i=1:m for j=1:n num(1,in(i,j)+1)=num(1,in(i,j)+1)+1;% 统计个数 end end p=num./(m*n);% 求概率 ut=0;%ut 是整幅图像的均值 for i=1:L ut=ut+(i-1)*p(i);end for t=0:L-1 w0=0;w1=0;for i=1:t w0=w0+p(i);end w1=1-w0;u0=0; for i=1:t if w0>0 u0=u0+i*p(i)/w0;else u0=u0+0;end end u1=0;for i=(t+1):L if w1>0 u1=u1+i*p(i)/w1;else u1=u1+0;end end rou(t+1)=w0*w1*(u0-u1)^2;%类间方差的求取 end maxrou=max(rou);%类间方差的最大值 for i=1:L if rou(i)==maxrou r=i-1;end end r %类间方差最大所对应的灰度值 for i=1:m for j=1:n if in(i,j)>r out(i,j)=1;else out(i,j)=0;end end end subplot(121),imshow(in)subplot(122),imshow(out)运行结果得到的阈值为:114