% Segment based on area, Region Growing;
clear all; close all; clc
[fileName,pathName] = uigetfile('*.*','Please select an image');%文件筐,选择文件
if(fileName)
fileName = strcat(pathName,fileName);
fileName = lower(fileName);%一致的小写字母形式
else
J = 0;%记录区域生长所分割得到的区域
msgbox('Please select an image');
return; %退出程序
end
I = imread(fileName);
if( ~( size(I,3)-3 ))
I = rgb2gray(I);%转化为单通道灰度图
end
I = im2double(I); %图像灰度值归一化到[0,1]之间
Ireshape = imresize(I,[600,800]);
I = Ireshape(51:475,200:699);
gausFilter = fspecial('gaussian',[5 5],0.5);
I = imfilter(I,gausFilter,'replicate');
%种子点的交互式选择
if( exist('x','var') == 0 && exist('y','var') == 0)
subplot(2,2,1),imshow(I,[]);
hold on;
[y,x] = getpts;%鼠标取点 回车确定
x = round(x(1));%选择种子点
y = round(y(1));
end
if( nargin == 0)
reg_maxdist = 0.1;
%nargin是matlab代码编写中常用的一个技巧,主要用于计算当前主函数的输入参数个
%数,一般可以根据nargin的返回值来确定主函数输入参数的缺省值。在实现中,如果
%用户输入的参数个数为零,那么默认为0.2
end
J = zeros(size(I)); % 主函数的返回值,记录区域生长所得到的区域
Isizes = size(I);
reg_mean = I(x,y);%表示分割好的区域内的平均值,初始化为种子点的灰度值
reg_size = 1;%分割的到的区域&#x