收藏 分销(赏)

数字图像处理MATLAB编程源程序实例:主要算法代码的实现.doc

上传人:可**** 文档编号:4196191 上传时间:2024-08-19 格式:DOC 页数:8 大小:85KB
下载 相关 举报
数字图像处理MATLAB编程源程序实例:主要算法代码的实现.doc_第1页
第1页 / 共8页
数字图像处理MATLAB编程源程序实例:主要算法代码的实现.doc_第2页
第2页 / 共8页
数字图像处理MATLAB编程源程序实例:主要算法代码的实现.doc_第3页
第3页 / 共8页
数字图像处理MATLAB编程源程序实例:主要算法代码的实现.doc_第4页
第4页 / 共8页
数字图像处理MATLAB编程源程序实例:主要算法代码的实现.doc_第5页
第5页 / 共8页
点击查看更多>>
资源描述

1、主要算法代码的实现(1) 几何变换的MATLAB代码global ImagenUmbral %定义一个全局变量ImagenUmbralglobal J %使用全局变量Jselection = questdlg(请选择几何变换,选择几何变换,水平镜像,垂直镜像,对角镜像,default) if strcmp(selection,水平镜像) %如果选择“水平镜像” M,N=size(J) %测量图像尺寸参数 I=J %将J赋给I for i=1:M %从第一行到最后一行 for j=1:N/2 %对每一行的第一个像素到中间的一个像素 t=I(i,j);I(i,j)=I(i,N-j+1);I(i,N

2、-j+1)=t; %交换这一行第一个像素和最后一个像素的灰度值,交换第二个和倒数第二个灰度值,以此类推,直到中间的像素。 end %end for end %end for subplot(224); %分割绘图窗口为两行两列,将句柄移到第四个位置 imshow(I) %显示图像 ImagenUmbral=I; %将图像赋予全局变量ImagenUmbralelse if strcmp(selection,垂直镜像) %如果选择“垂直镜像” M,N=size(J) %测量图像尺寸参数 I=J %将J赋给I for j=1:N %从第一列到最后一列 for i=1:M/2 %对每一列的第一个像素到

3、中间的一个像素 t=I(i,j);I(i,j)=I(M-i+1,j);I(M-i+1,j)=t; %交换这一列第一个像素和最后一个像素的灰度值,交换第二个和倒数第二个灰度值,以此类推,直到中间的像素。 end %end for end %end for subplot(224); %分割绘图窗口为两行两列,将句柄移到第四个位置 imshow(I) %显示图像 ImagenUmbral=I; %将图像赋予全局变量ImagenUmbral else if strcmp(selection,对角镜像) %如果选择“垂直镜像” I=J %将J赋给I M,N=size(I) %测量图像尺寸参数 for

4、i=1:M %从第一行到最后一行 for j=1:N/2 %对每一行的第一个像素到中间的一个像素 t=I(i,j);I(i,j)=I(M-i+1,N-j+1);I(M-i+1,N-j+1)=t;%交换第i行的第一个像素和M-i+1行的最后一个像素的灰度值,以此类推,直到中间的像素。 end %end for end %end for subplot(224); %分割绘图窗口为两行两列,将句柄移到第四个位置 imshow(I) %显示图像 ImagenUmbral=I; %将图像赋予全局变量ImagenUmbral end %end of else if strcmp(selection,对角

5、镜像) end %end of else if strcmp(selection,垂直镜像) end %end of if strcmp(selection,水平镜像) (2) 灰度反转的MATLAB实现global ImagenUmbral %定义一个全局变量ImagenUmbral,将灰度反转后的图像存入ImagenUmbral中global J %使用全局变量JA=double(J) %将图像J的各点像素值存入矩阵A中A=255-A %用255减去A的各点像素值,再重新存入A中A=uint8(A) %将A的每个元素转换成整数 subplot(224) %分割绘图窗口为两行两列,将句柄移到

6、第四个位置imshow(A) %显示图像AImagenUmbral=A %将A赋给全局变量ImagenUmbral(3) 直方图统计的MATLAB代码global ImagenUmbral %定义一个全局变量ImagenUmbralglobal J %使用全局变量Jfigure %弹出绘图窗口subplot(211) %分割绘图窗口为两行一列,将当前句柄移到第一个区域m,n=size(J); %测量图像尺寸参数GP=zeros(1,256); %预创建存放灰度出现概率的向量for k=0:255 %对每一个像素 GP(k+1)=length(find(J=k)/(m*n);%计算每级灰度出现的

7、概率,将其存入GP中相应位置end %end forbar(0:255,GP,b) %绘制直方图title(原图像直方图) %标题为原图像直方图subplot(212) %分割绘图窗口为两行一列,将当前句柄移到第二个区域K=ImagenUmbral %将全局变量ImagenUmbral赋予K m,n=size(K); %测量图像尺寸参数GP=zeros(1,256); %预创建存放灰度出现概率的向量for k=0:255 %对每一个像素 GP(k+1)=length(find(K=k)/(m*n);%计算每级灰度出现的概率,将其存入GP中相应位置end %end for bar(0:255,G

8、P,b) %绘制直方图title(处理后图像直方图) %标题为处理后图像直方图(4) 直方图均衡化方法的MATLAB代码function zhifangtujunhenghua_Callback(hObject, eventdata, handles)%直方图均衡化按钮的回调函数global ImagenUmbral %定义一个全局变量ImagenUmbral,将直方图均衡化后的图像存入ImagenUmbral中global J %使用全局变量Jsubplot(2,2,4); %分割绘图窗口为两行两列,将当前句柄移到第四个位置%W = histeq(J); %Matlab自带直方图均衡化函数P

9、S=J %令PS为待处理的图像m,n=size(PS); %测量图像尺寸参数GP=zeros(1,256); %预创建存放灰度出现概率的向量for k=0:255 %对每一个像素值 GP(k+1)=length(find(PS=k)/(m*n);%计算每级灰度出现的概率,将其存入GP中相应位置end %end forS1=zeros(1,256); %分配一个256维数组for i=1:256 %对每一个像素值 for j=1:i %对从1到这个像素值的所有像素的 S1(i)=GP(j)+S1(i);%计算Sk,Sk为一个映射,将对从1到这个像素值的所有像素的概率相加 end %end for

10、end %end forS2=round(S1*256)+0.5);%将Sk归到相近级的灰度PA=PS; %定义一个与PS一样大小的矩阵 for i=0:255 %对每一个像素值 PA(find(PS=i)=S2(i+1);%将各个像素归一化后的灰度值赋给这个像素end %end forimshow(PA) %显示均衡化后的图像 ImagenUmbral=PA; %将均衡化图像赋给ImagenUmbral(5) 中值滤波的MATLAB代码global ImagenUmbral %定义一个全局变量ImagenUmbral global J %使用全局变量JA=J %将J赋给A m,n = siz

11、e(A); %测量图像尺寸参数 B=A; %将A赋给B pixel_block = zeros(1,9); %开辟一个一行九列的数组,均赋于初值0 for i = 2:m-1 %对A中的各个像素点(不包括边界) for j = 2:n-2 pixel_block = reshape(A(i-1:i+1,j-1:j+1),9,1); %采用3*3的窗口,将一个像素点及其周围的8各点,依次存入新开辟的数组pixel_block中 sorted_block = sort(pixel_block); %将数组pixel_block排序block_median = sorted_block(5); %将

12、数组的中值赋予block_medianB(i,j) = block_median; %将block_median赋予B的相应位置的像素值end; %end of for j = 2:n-2 end; %end of for i = 2:m-1B = uint8(B); %将B中所有元素转换成0255之间的整数subplot(224) %分割绘图窗口为两行两列,将句柄移到第四个位置imshow(B) %显示图像BImagenUmbral=B %将B赋给全局变量ImagenUmbral(6) 均值滤波的MATLAB实现A=J %将J赋给A m,n = size(A); %m为A的行数,n为A的列数

13、 B=A; %将A赋给B pixel_block = zeros(1,9); %开辟一个一行九列的数组,均赋于初值0 for i = 2:m-1 %对A中的各个像素点(不包括边界) for j = 2:n-1 pixel_block = reshape(A(i-1:i+1,j-1:j+1),32,1);%采用3*3的窗口,将一个像素点及其周围的8各点,一次存入新开辟的数组pixel_block中 mean_block = mean(pixel_block); %求出数组中所有元素的平均值B(i,j) = mean_block; %将mean_block赋予B的相应位置的像素值end; %end

14、 of for j = 2:n-2 end; %end of for i = 2:m-1B = uint8(B); %将B中所有元素转换成0255之间的整数subplot(224) %分割绘图窗口为两行两列,将句柄移到第四个位置imshow(B) %显示图像BImagenUmbral=B %将B赋给全局变量ImagenUmbral(7) Sobel边缘算子法的MATLAB代码global ImagenUmbral %定义一个全局变量ImagenUmbral global J %使用全局变量JI=J %将J赋予IA=J %令A=J,准备将处理后图像存入A中M,N=size(I); %测量图像尺寸

15、参数I=double(I); %将I中的所有元素变为双精度型for y=2:M-1 %对每一个像素(不包括边界) for x=2:N-1 B(1)=I(x-1,y+1)+I(x,y+1)*2+I(x+1,y+1)-I(x-1,y-1)-I(x,y-1)*2-I(x+1,y-1);%用第一个方向算子对这个像素做卷积 B(2)=I(x-1,y)+I(x-1,y+1)*2+I(x,y+1)-I(x,y-1)-I(x+1,y+1)*2-I(x+1,y); %用第二个方向算子对这个像素做卷积 B(3)=I(x-1,y-1)+I(x-1,y)*2+I(x-1,y+1)-I(x+1,y+1)-I(x+1,y

16、)*2-I(x+1,y+1);%用第三个方向算子对这个像素做卷积 B(4)=I(x-1,y)+I(x-1,y-1)*2+I(x,y+1)-I(x+1,y)-I(x+1,y+1)*2-I(x,y+1); %用第四个方向算子对这个像素做卷积 B(5)=I(x-1,y-1)+I(x,y-1)*2+I(x+1,y+1)-I(x-1,y+1)-I(x,y+1)*2-I(x+1,y+1);%用第五个方向算子对这个像素做卷积 B(6)=I(x,y-1)+I(x+1,y+1)*2+I(x+1,y)-I(x-1,y)-I(x-1,y+1)*2-I(x,y+1); %用第六个方向算子对这个像素做卷积 B(7)=I

17、(x+1,y+1)+I(x+1,y)*2+I(x+1,y+1)-I(x-1,y-1)-I(x-1,y)*2-I(x-1,y+1);%用第七个方向算子对这个像素做卷积 B(8)=I(x+1,y)+I(x+1,y+1)*2+I(x,y+1)-I(x-1,y)-I(x-1,y-1)*2-I(x,y-1); %用第八个方向算子对这个像素做卷积 b=max(B) %将这八个卷积值的最大值赋予b if b255 b=255 %如果b的值超过255,则重置为255 end %end if A(x,y)=b; %将b作为A中相应点的输出值 end %end forend %end forsubplot(224

18、) %分割绘图窗口为两行两列,将句柄移到第四个位置imshow(A) %显示图像AImagenUmbral=A %将A赋给全局变量ImagenUmbral (8) Prewitt边缘算子法的MATLAB实现 I=J %将J赋予IA=J %令A=J,准备将处理后图像存入A中M,N=size(I); %将I的各点像素值存入M行N列的矩阵中I=double(I); %将I中的所有元素变为双精度型for y=2:M-1 %对每一个像素(不包括边界) for x=2:N-1 B(1)=I(x-1,y+1)+I(x,y+1)+I(x+1,y+1)-I(x-1,y-1)-I(x,y-1)-I(x+1,y-1

19、);%用第一个方向算子对这个像素做卷积B(2)=I(x-1,y)+I(x-1,y+1)+I(x,y+1)-I(x,y-1)-I(x+1,y+1)-I(x+1,y); %用第二个方向算子对这个像素做卷积 B(3)=I(x-1,y-1)+I(x-1,y)+I(x-1,y+1)-I(x+1,y+1)-I(x+1,y)-I(x+1,y+1);%用第三个方向算子对这个像素做卷积 B(4)=I(x-1,y)+I(x-1,y-1)+I(x,y+1)-I(x+1,y)-I(x+1,y+1)-I(x,y+1); %用第四个方向算子对这个像素做卷积 B(5)=I(x-1,y-1)+I(x,y-1)+I(x+1,y

20、+1)-I(x-1,y+1)-I(x,y+1)-I(x+1,y+1);%用第五个方向算子对这个像素做卷积 B(6)=I(x,y-1)+I(x+1,y+1)+I(x+1,y)-I(x-1,y)-I(x-1,y+1)-I(x,y+1); %用第六个方向算子对这个像素做卷积 B(7)=I(x+1,y+1)+I(x+1,y)+I(x+1,y+1)-I(x-1,y-1)-I(x-1,y)-I(x-1,y+1);%用第七个方向算子对这个像素做卷积 B(8)=I(x+1,y)+I(x+1,y+1)+I(x,y+1)-I(x-1,y)-I(x-1,y-1)-I(x,y-1); %用第八个方向算子对这个像素做卷

21、积 b=max(B) %将这八个卷积值的最大值赋予b if b255 b=255 %如果b的值超过255,则重置为255 end %end if A(x,y)=b; %将b作为A中相应点的输出值 end %end forend %end forsubplot(224) %分割绘图窗口为两行两列,将句柄移到第四个位置imshow(A) %显示图像AImagenUmbral=A %将A赋给全局变量ImagenUmbral (9) Roberts边缘算子法的MATLAB实现 I=J %将J赋给I M,N=size(I); %测量图像尺寸参数I=double(I)for y=1:M-1 %对每一个像素

22、 for x=1:N-1 d=2*(abs(I(x,y)-I(x+1,y+1)+abs(I(x+1,y)-I(x,y+1);%用绝对值近似计算梯度值if (d255) d=255 %如果d超过255,则将d置为255 end %end if K(x,y)=d; %将该点的灰度值置为d end %end of for y=1:N-1end %end of for x=1:M-1 subplot(224) %分割绘图窗口,将当前句柄移至第二行第二个位置 imshow(K) %显示I ImagenUmbral=K %将I赋给全局变量ImagenUmbral (10) 医学伪彩色处理的MATLAB代码

23、global ImagenUmbral %定义一个全局变量ImagenUmbral,将灰度反转后的图像存入ImagenUmbral中 global J %使用全局变量JI=J %将J赋给I M,N=size(I); %测量图像尺寸参数for i=1:M %对每一个像素 for j=1:N b=I(i,j) %令变量b等于当前灰度值 if b64 %如果当前灰度值小于64 R(i,j)=0; %将这个点的R分量置为0 G(i,j)=4*b; %将这个点的G分量置为4*b B(i,j)=255; %将这个点的B分量置为255 else if b128 %如果当前灰度值小于128,大于64 R(i,

24、j)=0; %将这个点的R分量置为0 G(i,j)=255; %将这个点的G分量置为255 B(i,j)=(127-b)*4; %将这个点的B分量置为(127-b)*4 else if b192 %如果当前灰度值小于192,大于128 R(i,j)=(b-128)*4; %将这个点的R分量置为b-128)*4 G(i,j)=255; %将这个点的G分量置为255 B(i,j)=0; %将这个点的B分量置为0 else %如果当前灰度值大于192 R(i,j)=255; %将这个点的R分量置为255 G(i,j)=(255-b)*4; %将这个点的G分量置为(255-b)*4 B(i,j)=0;

25、 %将这个点的B分量置为0 end %end of if b192 end %end of if b128 end %end of if b64 G2C(i,j,1)=R(i,j); %将新的R分量存入图像中G2C中 G2C(i,j,2)=G(i,j); %将新的R分量存入图像中G2C中 G2C(i,j,3)=B(i,j); %将新的R分量存入图像中G2C中 end %end of for j=1:Nend %end of for i=1:Msubplot(224) %分割绘图窗口为两行两列,将句柄移到第四个位置imshow(G2C); %显示图像G2CImagenUmbral=G2C; %将

26、G2C赋给全局变量ImagenUmbral(11) 遥感伪彩色处理的MATLAB代码I=J %将J赋给I M,N=size(I); %测量图像尺寸参数 for i=1:N %对每一个像素 for j=1:M b=I(i,j); %令变量b等于当前灰度值 if b85 %如果当前灰度值小于85 R(i,j)=0; %将这个点的R分量置为0 G(i,j)=(5-b/42.5)*b; %将这个点的G分量置为(5-b/42.5)*b B(i,j)=(5-(84-b)/42.5)*(84-b); %将这个点的B分量置为(5-(84-b)/42.5)*(84-b) else if b170 %如果当前灰度

27、值小于170 R(i,j)=(5-(b-85)/42.5)*(b-85); %将这个点的R分量置为(5-(b-85)/42.5)*(b-85) G(i,j)=(5-(169-b)/42.5)*(169-b); %将这个点的G分量置为(5-(169-b)/42.5)*(169-b) B(i,j)=0; %将这个点的B分量置为0 else %如果当前灰度值大于170 R(i,j)=(5-(255-b)/42.5)*(255-b);%将这个点的R分量置为(5-(255-b)/42.5)*(255-b) G(i,j)=0; %将这个点的G分量置为0 B(i,j)=(5-(b-170)/42.5)*(b-170);%将这个点的B分量置为(5-(b-170)/4

展开阅读全文
部分上传会员的收益排行 01、路***(¥15400+),02、曲****(¥15300+),
03、wei****016(¥13200+),04、大***流(¥12600+),
05、Fis****915(¥4200+),06、h****i(¥4100+),
07、Q**(¥3400+),08、自******点(¥2400+),
09、h*****x(¥1400+),10、c****e(¥1100+),
11、be*****ha(¥800+),12、13********8(¥800+)。
相似文档                                   自信AI助手自信AI助手
搜索标签

当前位置:首页 > 包罗万象 > 大杂烩

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        获赠5币

©2010-2025 宁波自信网络信息技术有限公司  版权所有

客服电话:4008-655-100  投诉/维权电话:4009-655-100

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :gzh.png    weibo.png    LOFTER.png 

客服