2022年数字图像处理代码大全.docx
精选学习资料 - - - - - - - - - 1.图像反转MATLAB 程序实现如下:I=imread'xian.bmp' J=doubleI; J=-J+256-1; H=uint8J; %图像反转线性变换subplot1,2,1,imshowI; subplot1,2,2,imshowH; 2.灰度线性变换 MATLAB 程序实现如下:I=imread'xian.bmp' subplot2,2,1,imshowI; title' 原始图像 ' axis50,250,50,200; axis on; %显示坐标系 I1=rgb2grayI; subplot2,2,2,imshowI1; title' 灰度图像 ' axis50,250,50,200; axis on; %显示坐标系J=imadjustI1,0.1 0.5,; % 为0 1 局部拉伸,把0.1 0.5 内的灰度拉伸名师归纳总结 - - - - - - -第 1 页,共 22 页精选学习资料 - - - - - - - - - subplot2,2,3,imshowJ; title' 线性变换图像 0.1 0.5' axis50,250,50,200; grid on; %显示网格线 axis on; %显示坐标系K=imadjustI1,0.3 伸为 0 1 0.7,; % 局部拉伸,把 0.3 0.7内的灰度拉subplot2,2,4,imshowK; title' 线性变换图像 0.3 0.7' axis50,250,50,200; grid on; %显示网格线 axis on; %显示坐标系3.非线性变换 MATLAB 程序实现如下:I=imread'xian.bmp' I1=rgb2grayI; subplot1,2,1,imshowI1; title' 灰度图像 ' axis50,250,50,200; grid on; %显示网格线 axis on; %显示坐标系 J=doubleI1; 名师归纳总结 - - - - - - -第 2 页,共 22 页精选学习资料 - - - - - - - - - J=40*logJ+1; H=uint8J; subplot1,2,2,imshowH; title' 对数变换图像 ' axis50,250,50,200; grid on; %显示网格线axis on; %显示坐标系4.直方图均衡化 MATLAB 程序实现如下:I=imread'xian.bmp' I=rgb2grayI; figure; subplot2,2,1; imshowI; subplot2,2,2; imhistI; I1=histeqI; figure; subplot2,2,1; imshowI1; subplot2,2,2; imhistI1; 名师归纳总结 - - - - - - -第 3 页,共 22 页精选学习资料 - - - - - - - - - 5.线性平滑滤波器 用 MATLAB 实现领域平均法抑制噪声程序:I=imread'xian.bmp' subplot231 imshowI title' 原始图像 ' I=rgb2grayI; I1=imnoiseI,'salt & pepper',0.02; subplot232 imshowI1 title' 添加椒盐噪声的图像 ' k1=filter2fspecial'average',3,I1/255; 板平滑滤波k2=filter2fspecial'average',5,I1/255; %进行 3*3模%进行 5*5模板平滑滤波k3=filter2fspecial'average',7,I1/255; 板平滑滤波 k4=filter2fspecial'average',9,I1/255; 板平滑滤波 subplot233,imshowk1;title'3*3 模板平滑滤波 ' subplot234,imshowk2;title'5*5 模板平滑滤波 ' subplot235,imshowk3;title'7*7 模板平滑滤波 ' %进行 7*7模%进行 9*9模名师归纳总结 - - - - - - -第 4 页,共 22 页精选学习资料 - - - - - - - - - subplot236,imshowk4;title'9*9 6.中值滤波器模板平滑滤波 ' 用 MATLAB 实现中值滤波程序如下:I=imread'xian.bmp' I=rgb2grayI; J=imnoiseI,'salt&pepper',0.02; subplot231,imshowI;title' 原图像 ' subplot232,imshowJ;title' k1=medfilt2J; k2=medfilt2J,5,5; k3=medfilt2J,7,7; k4=medfilt2J,9,9; 添加椒盐噪声图像 ' %进行 3*3模板中值滤波 %进行 5*5 模板中值滤波 %进行 7*7 模板中值滤波 %进行 9*9 模板中值滤波subplot233,imshowk1;title'3*3 模板中值滤波 ' subplot234,imshowk2;title'5*5 subplot235,imshowk3;title'7*7 subplot236,imshowk4;title'9*9模板中值滤波 ' 模板中值滤波 ' 模板中值滤波 ' 7.用 Sobel 算子和拉普拉斯对图像锐化:I=imread'xian.bmp' subplot2,2,1,imshowI; title' 原始图像 ' axis50,250,50,200; 名师归纳总结 - - - - - - -第 5 页,共 22 页精选学习资料 - - - - - - - - - grid on; %显示网格线axis on; %显示坐标系 I1=im2bwI; subplot2,2,2,imshowI1; title' 二值图像 ' axis50,250,50,200; grid on; %显示网格线 axis on; %显示坐标系 H=fspecial'sobel' %挑选 sobel 算子 J=filter2H,I1; % 卷积运算 subplot2,2,3,imshowJ; title'sobel 算子锐化图像 ' axis50,250,50,200; grid on; %显示网格线 axis on; %显示坐标系 h=0 1 0,1 -4 1,0 1 0; %拉普拉斯算子 J1=conv2I1,h,'same' %卷积运算 subplot2,2,4,imshowJ1; title' 拉普拉斯算子锐化图像 ' axis50,250,50,200; 名师归纳总结 grid on; %显示网格线第 6 页,共 22 页axis on; %显示坐标系- - - - - - -精选学习资料 - - - - - - - - - 8.梯度算子检测边缘 用 MATLAB 实现如下:I=imread'xian.bmp' subplot2,3,1; imshowI; title' 原始图像 ' axis50,250,50,200; grid on; %显示网格线 axis on; %显示坐标系 I1=im2bwI; subplot2,3,2; imshowI1; title' 二值图像 ' axis50,250,50,200; grid on; %显示网格线 axis on; %显示坐标系 I2=edgeI1,'roberts' figure; subplot2,3,3; imshowI2; title'roberts 算子分割结果 ' axis50,250,50,200; 名师归纳总结 - - - - - - -第 7 页,共 22 页精选学习资料 - - - - - - - - - grid on; %显示网格线axis on; %显示坐标系 I3=edgeI1,'sobel' subplot2,3,4; imshowI3; title'sobel 算子分割结果 ' axis50,250,50,200; grid on; %显示网格线 axis on; %显示坐标系 I4=edgeI1,'Prewitt' subplot2,3,5; imshowI4; title'Prewitt 算子分割结果 ' axis50,250,50,200; grid on; %显示网格线 axis on; %显示坐标系9.LOG 算子检测边缘 用 MATLAB 程序实现如下:I=imread'xian.bmp' subplot2,2,1; imshowI; title' 原始图像 ' 名师归纳总结 - - - - - - -第 8 页,共 22 页精选学习资料 - - - - - - - - - I1=rgb2grayI; subplot2,2,2; imshowI1; title' 灰度图像 ' I2=edgeI1,'log' subplot2,2,3; imshowI2; title'log 算子分割结果 ' 10.Canny 算子检测边缘 用 MATLAB 程序实现如下:I=imread'xian.bmp' subplot2,2,1; imshowI; title' 原始图像 ' I1=rgb2grayI; subplot2,2,2; imshowI1; title' 灰度图像 ' I2=edgeI1,'canny' subplot2,2,3; imshowI2; title'canny 算子分割结果 ' 名师归纳总结 - - - - - - -第 9 页,共 22 页精选学习资料 - - - - - - - - - 11.边界跟踪( bwtraceboundary 函数)clc clear all I=imread'xian.bmp' figure imshowI; title' 原始图像 ' I1=rgb2grayI; threshold=graythreshI1; 值图像所需的门限%将彩色图像转化灰度图像 %运算将灰度图像转化为二BW=im2bwI1, threshold; %将灰度图像转化为二值图像figure imshowBW; title' 二值图像 ' dim=sizeBW; col=rounddim2/2-90; row=findBW:,col,1; connectivity=8; num_points=180; %运算起始点列坐标 %运算起始点行坐标contour=bwtraceboundaryBW,row,col,'N',connectivity,num_p oints; 名师归纳总结 - - - - - - -第 10 页,共 22 页精选学习资料 - - - - - - - - - %提取边界figure imshowI1; hold on; plotcontour:,2,contour:,1, 'g','LineWidth' ,2; title' 边界跟踪图像 ' 12.Hough 变换 I= imread'xian.bmp' rotI=rgb2grayI; subplot2,2,1; imshowrotI; title' 灰度图像 ' axis50,250,50,200; grid on; axis on; BW=edgerotI,'prewitt' subplot2,2,2; imshowBW; title'prewitt 算子边缘检测后图像 ' axis50,250,50,200; grid on; axis on; 名师归纳总结 - - - - - - -第 11 页,共 22 页精选学习资料 - - - - - - - - - H,T,R=houghBW; subplot2,2,3; imshowH,'XData',T,'YData',R,'InitialMagnification','fit' title' 霍夫变换图 ' xlabel'theta',ylabel'rho' axis on , axis normal, hold on; P=houghpeaksH,5,'threshold',ceil0.3*maxH:; x=TP:,2;y=RP:,1; plotx,y,'s','color','white' lines=houghlinesBW,T,R,P,'FillGap',5,'MinLength',7; subplot2,2,4;,imshowrotI; title' 霍夫变换图像检测 ' axis50,250,50,200; grid on; axis on; hold on; max_len=0; for k=1:lengthlines xy=linesk.point1;linesk.point2; plotxy:,1,xy:,2,'LineWidth',2,'Color','green' plotxy1,1,xy1,2,'x','LineWidth',2,'Color','yellow' plotxy2,1,xy2,2,'x','LineWidth',2,'Color','red' 名师归纳总结 - - - - - - -第 12 页,共 22 页精选学习资料 - - - - - - - - - len=normlinesk.point1-linesk.point2; iflen>max_len max_len=len; xy_long=xy; end end plotxy_long:,1,xy_long:,2,'LineWidth',2,'Color','cyan' 13. 直方图阈值法 用 MATLAB 实现直方图阈值法:I=imread'xian.bmp' I1=rgb2grayI; figure; subplot2,2,1; imshowI1; title' 灰度图像 ' axis50,250,50,200; grid on; %显示网格线 axis on; %显示坐标系m,n=sizeI1; 参数% 测量图像尺寸GP=zeros1,256; %预创建存放灰度显现概率的向量名师归纳总结 - - - - - - -第 13 页,共 22 页精选学习资料 - - - - - - - - - for k=0:255 GPk+1=lengthfindI1=k/m*n; 显现的概率,将其存入 GP 中相应位置end % 运算每级灰度subplot2,2,2,bar0:255,GP,'g' %绘制直方图title' 灰度直方图 ' xlabel' 灰度值 ' ylabel' 显现概率 ' I2=im2bwI,150/255; subplot2,2,3,imshowI2; title' 阈值 150 的分割图像 ' axis50,250,50,200; grid on; % %显示网格线axis on; %显示坐标系I3=im2bwI,200/255; subplot2,2,4,imshowI3; title' 阈值 200 的分割图像 ' axis50,250,50,200; grid on; %显示网格线 axis on; %显示坐标系14. 自动阈值法: Otsu 法名师归纳总结 - - - - - - -第 14 页,共 22 页精选学习资料 - - - - - - - - - 用 MATLAB 实现 Otsu 算法:clc clear all I=imread'xian.bmp' subplot1,2,1,imshowI; title' 原始图像 ' axis50,250,50,200; grid on; %显示网格线 axis on; %显示坐标系 level=graythreshI; %确定灰度阈值 BW=im2bwI,level; subplot1,2,2,imshowBW; title'Otsu 法阈值分割图像 ' axis50,250,50,200; grid on; %显示网格线 axis on; %显示坐标系15. 膨胀操作 I=imread'xian.bmp' %载入图像 I1=rgb2grayI; subplot1,2,1; imshowI1; title' 灰度图像 ' 名师归纳总结 - - - - - - -第 15 页,共 22 页精选学习资料 - - - - - - - - - axis50,250,50,200; grid on; %显示网格线axis on; %显示坐标系se=strel'disk',1; I2=imdilateI1,se; 行膨胀subplot1,2,2; imshowI2; %生成圆形结构元素 %用生成的结构元素对图像进title' 膨胀后图像 ' axis50,250,50,200; grid on; %显示网格线 axis on; %显示坐标系16. 腐蚀操作 MATLAB 实现腐蚀操作 I=imread'xian.bmp' %载入图像 I1=rgb2grayI; subplot1,2,1; imshowI1; title' 灰度图像 ' axis50,250,50,200; 名师归纳总结 grid on; %显示网格线第 16 页,共 22 页axis on; %显示坐标系- - - - - - -精选学习资料 - - - - - - - - - se=strel'disk',1; I2=imerodeI1,se; 蚀 subplot1,2,2; imshowI2; % 生成圆形结构元素 %用生成的结构元素对图像进行腐title' 腐蚀后图像 ' axis50,250,50,200; grid on; %显示网格线 axis on; %显示坐标系17. 开启和闭合操作 用 MATLAB 实现开启和闭合操作I=imread'xian.bmp' %载入图像 subplot2,2,1,imshowI; title' 原始图像 ' axis50,250,50,200; axis on; %显示坐标系 I1=rgb2grayI; subplot2,2,2,imshowI1; title' 灰度图像 ' axis50,250,50,200; axis on; %显示坐标系se=strel'disk',1; %采纳半径为 1的圆作为结构元素名师归纳总结 - - - - - - -第 17 页,共 22 页精选学习资料 - - - - - - - - - I2=imopenI1,se; % 开启操作 I3=imcloseI1,se; %闭合操作 subplot2,2,3,imshowI2; title' 开启运算后图像 ' axis50,250,50,200; axis on; %显示坐标系 subplot2,2,4,imshowI3; title' 闭合运算后图像 ' axis50,250,50,200; axis on; %显示坐标系18. 开启和闭合组合操作 I=imread'xian.bmp' %载入图像 subplot3,2,1,imshowI; title' 原始图像 ' axis50,250,50,200; axis on; %显示坐标系 I1=rgb2grayI; subplot3,2,2,imshowI1; title' 灰度图像 ' axis50,250,50,200; axis on; %显示坐标系 se=strel'disk',1; 名师归纳总结 - - - - - - -第 18 页,共 22 页精选学习资料 - - - - - - - - - I2=imopenI1,se; % 开启操作I3=imcloseI1,se; %闭合操作subplot3,2,3,imshowI2; title' 开启运算后图像 ' axis50,250,50,200; axis on; %显示坐标系subplot3,2,4,imshowI3; title' 闭合运算后图像 ' axis50,250,50,200; axis on; %显示坐标系se=strel'disk',1; I4=imopenI1,se; I5=imcloseI4,se; subplot3,2,5,imshowI5; title' 开闭运算图像 ' axis50,250,50,200; %开闭运算图像axis on; %显示坐标系 I6=imcloseI1,se; I7=imopenI6,se; subplot3,2,6,imshowI7; title' 闭开运算图像 ' axis50,250,50,200; %闭开运算图像名师归纳总结 - - - - - - -第 19 页,共 22 页精选学习资料 - - - - - - - - - axis on; %显示坐标系19. 形状学边界提取 利用 MATLAB 实现如下:I=imread'xian.bmp' %载入图像 subplot1,3,1,imshowI; title' 原始图像 ' axis50,250,50,200; grid on; %显示网格线 axis on; %显示坐标系 I1=im2bwI; subplot1,3,2,imshowI1; title' 二值化图像 ' axis50,250,50,200; grid on; %显示网格线 axis on; %显示坐标系I2=bwperimI1; %猎取区域的周长subplot1,3,3,imshowI2; title' 边界周长的二值图像 ' axis50,250,50,200; grid on; axis on; 名师归纳总结 - - - - - - -第 20 页,共 22 页精选学习资料 - - - - - - - - - 20. 形状学骨架提取 利用 MATLAB 实现如下:I=imread'xian.bmp' subplot2,2,1,imshowI; title' 原始图像 ' axis50,250,50,200; axis on; I1=im2bwI; subplot2,2,2,imshowI1; title' 二值图像 ' axis50,250,50,200; axis on; I2=bwmorphI1,'skel',1; subplot2,2,3,imshowI2; title'1 次骨架提取 ' axis50,250,50,200; axis on; I3=bwmorphI1,'skel',2; subplot2,2,4,imshowI3; title'2 次骨架提取 ' axis50,250,50,200; axis on; 名师归纳总结 - - - - - - -第 21 页,共 22 页精选学习资料 - - - - - - - - - 21. 直接提取四个顶点坐标 I = imread'xian.bmp' I = I:,:,1; BW=im2bwI; figure imshowBW x,y=getpts 名师归纳总结 - - - - - - -第 22 页,共 22 页