拉普拉斯算子

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

  

posted @ 2015-09-23 09:18  VEIZI  阅读(1041)  评论(0编辑  收藏  举报