from; http://hi.baidu.com/archiless/blog/item/97a97cd9a12e25e939012fc7.html
%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('闭操作后的图像');