from: http://hi.baidu.com/archiless/blog/item/97a97cd9a12e25e939012fc7.html
%function erode0207all(Input,thresh,element)
Input=imread('c:/boat.png');
thresh=128;
%element=ones(5,5);
element=5;
% 本程序能够对灰度图像先进行二值化,再进行腐蚀操作
% 格式介绍:Input为欲处理的灰度图像;thresh为自选的阈值参数进行二值化,可输入0到255之间任意整数
% element为进行腐蚀操作的结构单元,本程序可提供3×3、5×5、7×7等奇数方阵的结构单元,
% 原点都在中心位置,建议用三阶或五阶方阵
%----------------------------Begin Code------------------------------
% 一,图像二值化处理
[m,n]=size(Input); % 确定原图像的长、宽
Two=zeros(m,n); % 定义二值化矩阵
Two(find(Input>=thresh))=1; % 对原图像进行二值化处理
% 二,腐蚀操作前的预处理
Temp=zeros(element); % 定义3×3或5×5的结构单元
Output=zeros(m,n); % 定义输出矩阵
s=m+1-element; % s、t为循环长度
t=n+1-element;
Length=element-1; % Length和Radius的含义在循环中介绍
Radius=Length/2;
square=element*element; % 两个结构单元中元素的总和,即 9 、25 、49 …………
% 三,进行腐蚀操作
for i=1:s
for j=1:t
Temp=Two(i:i+Length,j:j+Length); % 从二值化图像中依次取出三阶或五阶方阵
if sum(Temp(:))==square % 判断方阵中元素总和为 9 或 25 时
Output(i+Radius,j+Radius)=1; %方阵中心元素在输出矩阵中相应位置上的值为 1
end
end
end
% 四,输出处理前后的图像
figure,subplot(2,2,1),imshow(Input),title('原图像');
subplot(2,2,2),imshow(Two),title('二值化后的图像');
subplot(2,2,3),imshow(Output),title('腐蚀后的图像');
[qq,pp]=size(Input)
[ww,mm]=size(Two)
%--------------------------------End Code--------------------------------