%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('闭操作后的图像');