拉普拉斯算子
%function PicOut=Lap_edge(PicInput,thresh) PicInput=imread(\'c:/boat.png\'); thresh=45; % 本程序能够将BMP格式的黑白灰度图像用拉普拉斯算子进行边缘检测 % 生物图像处理作业2 % 格式为 a=Lap_edge(PicInput,thresh) 或者嵌套为 Lap_edge(imread(\'rice.tif\'),15) % thresh参数可自选,对于rice.tif这张图来说最合适的值大约为14到18 % 使用例子:PicInput=imread(\'rice.tif\'); % a=Lap_edge(PicInput,15); %---------------- BEGIN CODE ---------------- % 一,原图像预处理,读入黑白图片并确定长和宽 [m,n]=size(PicInput); %确定图片的长和宽 % 二,拉普拉斯变换预处理,定义镜框矩阵和输出矩阵 r=m+2; %把图片的长和宽各加2 c=n+2; PicFrame=zeros(r,c); %定义二维数组“PicFrame”,长、宽比“Input”各多2,成为镜框的尺寸 b=zeros(m,n); %定义滤波后的数组 % 三,拉普拉斯运算的三个矩阵 Temp=zeros(3); %定义三阶方阵“Temp”,为临时矩阵 op=[0 -1 0;-1 4 -1;0 -1 0]; %定义拉普拉斯算子 Result=zeros(3); %定义三阶方阵“Result”,为运算结果矩阵 % 四,原图像矩阵处理,做一个“像框” %PicFrame(2:m+1,2:n+1)=PicInput; %把原图的矩阵放到新的矩阵“PicFrame”中心,它的第一行、最后一行、第一列、 PicFrame(2:m+1,2:n+1)=PicInput; %最后一列都是“0”,即原图矩阵周围有一圈“0”的边缘,好像给图像加一个像框 figure, imshow(PicFrame,[]); PicFrame(1,:)=PicFrame(2,:); %把第二行的值赋给第一行 PicFrame(r,:)=PicFrame(r-1,:); %把倒数第二行的值赋给最后一行 PicFrame(:,1)=PicFrame(:,2); %把第二列的值赋给第一列 PicFrame(:,c)=PicFrame(:,c-1); %把倒数第二列的值赋给最后一列 figure,imshow(PicFrame,[]); % 五,用拉普拉斯算子进行滤波 for i=1:m for j=1:n Temp=PicFrame(i:i+2,j:j+2); %从“PicFrame”矩阵中依次取出三阶方阵,赋值给临时矩阵“Temp” Result=Temp.*op; %临时矩阵与拉普拉斯算子“点乘”,赋值给结果矩阵“Result” b(i,j)=sum(sum(Result)); %结果矩阵中“十”字线上元素相加,赋值给输出矩阵中相应的位置, %即临时矩阵中心元素所对应的位 end end figure,imshow(b); % 六,设定阈值,将图像二值化 % thresh=1.618*mean2(abs(b)) 可用黄金分割的比例选阈值优点是边缘清晰 e=repmat(logical(uint8(0)),m,n); %创建数组 e(find(b>thresh))=1; %阈值判断二值化 PicOut=e; %函数输出 figure,subplot(1,2,1),imshow(PicInput); %显示原图片 title(\'原图像\'); subplot(1,2,2),imshow(e); %显示拉普拉斯边缘检测后的图片 title(\'自编函数边缘检测后的图像\'); %----------------END OF CODE ---------------- 图像开操作- - Tag: matlab function open0207(I,thresh,element) % 本程序能够对灰度图像先进行二值化,再进行开操作 % 本程序先调用腐蚀函数,再调用膨胀函数,实现开操作 % 作者;archiless lorder % 一,调用腐蚀函数 [C,B]=erode0207simple(I,thresh,element); % 二,调用膨胀函数 F=dilate0207simple(C,1,element); % 三,输出图像 figure,subplot(221),imshow(I),title(\'原图像\'); subplot(222),imshow(B),title(\'二值化后的图像\'); subplot(223),imshow(F),title(\'开操作后的图像\'); 图像闭操作- - Tag: matlab 图像 close function close0207(I,thresh,element) % 本程序能够对灰度图像先进行二值化,再进行闭操作 % 本程序先调用膨胀函数,再调用腐蚀函数,实现闭操作 % 作者;archiless lorder % 一,调用膨胀函数 [F,E]=dilate0207simple(I,thresh,element); % 二,调用腐蚀函数 C=erode0207simple(F,1,element); % 三,输出图像 figure,subplot(221),imshow(I),title(\'原图像\'); subplot(222),imshow(E),title(\'二值化后的图像\'); subplot(223),imshow(C),title(\'闭操作后的图像\');