
翻出了当年熬夜做的作业
clear all;
close all;
boyp=imread('男图片.jpg');
boyp=imresize(boyp,[255 255],'bilinear')%调整图片大小
figure,imshow(boyp),title('原始图像')
[M,N]=size(boyp(:,:,1));
Y=zeros(M,N);
boy=zeros(M,N,3);
[y,x]=getpts; %获得区域生长起始点
x1=round(x);y1=round(y); %圆整
seed=[boyp(x1,y1,1),boyp(x1,y1,2),boyp(x1,y1,3)];
Y(x1,y1)=1; %将Y中与所取点相对应位置的点设置为1
count=1; %记录每次判断一点周围八点符合条件的新点的数目
threhold=12; %颜色相似性阈值
while count>0
count=0;
for i=1:M
for j=1:N
if Y(i,j)==1
if (i-1)>0 && (i+1)<=M && (j-1)>0 && (j+1)<=N
%判断此点是否为图像边界上的点
for u= -1:1 %判断点周围4点是否符合域值条件
for v= -1:1 %u,v为偏移量
r=boyp(i+u,j+v,1);g=boyp(i+u,j+v,2);b=boyp(i+u,j+v,3);
%判断点是否未存在于生长区域中,并且为符合域值条件的点
if Y(i+u,j+v)==0 && abs(r-seed(1))<threhold …
&& abs(g-seed(2))<threhold && abs(b-seed(3))<threhold
boy(i+u,j+v,:)=255;
Y(i+u,j+v)=1;
count=1;
end
end
end
end
end
end
end
end
imwrite(uint8(boy),'男原始头发.jpg')
se0 = strel('disk',4);%生成圆形结构元素
hair0 = imerode(boy,se0);
hair0=-1*hair0+1;
imwrite(hair0,'男腐蚀运算后头发.jpg');
figure,
subplot(2,2,1),imshow(boyp),title('原始图像');
subplot(2,2,2),imshow(boy),title('男初始头发');
subplot(2,2,3),imshow(hair0),title('男腐蚀运算后头发');
lu主有兴趣试试