u013116760 于 2014.07.26 15:50 提问

matlab图像区域标号问题,谢谢！

[7,7,7,4,4,4,4,5;
4,4,4,4,5,4,5,5;
5,5,5,5,5,5,5,5;
5,5,5,1,1,1,1,1;
1,1,1,1,1,1,1,1;
1,1,1,4,4,4,4,4];

[1,1,1,2,2,2,2,3;
2,2,2,2,3,2,3,3;
3,3,3,3,3,3,3,3;
3,3,3,4,4,4,4,4;
4,4,4,4,4,4,4,4;
4,4,4,5,5,5,5,5;]

1个回答

wangyaninglm      2015.01.20 11:19
`````` I=imread('1.jpg');
f=rgb2gray(I);
f1=im2bw(f,192/240);
BW1=double(f1);
BW=edge(BW1,'sobel',0.4);
r_max=90;
r_min=20;step_r=10;step_angle=pi/6;p=0.3;
% p:阈值，0，1之间的数
% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% output
% hough_space:参数空间，h(a,b,r)表示圆心在(a,b)半径为r的圆上的点数
% hough_circl:二值图像，检测到的圆
% para:检测到的圆的圆心、半径
[m,n] = size(BW);
size_r = round((r_max-r_min)/step_r)+1;
size_angle = round(2*pi/step_angle);
hough_space = zeros(m,n,size_r);
[rows,cols] = find(BW);
ecount = size(rows);
% Hough变换
% 将图像空间(x,y)对应到参数空间(a,b,r)
% a = x-r*cos(angle)
% b = y-r*sin(angle)
for i=1:ecount
for r=1:size_r
for k=1:size_angle
a = round(rows(i)-(r_min+(r-1)*step_r)*cos(k*step_angle));
b = round(cols(i)-(r_min+(r-1)*step_r)*sin(k*step_angle));
if(a>0&&a<=m&&b>0&&b<=n)
hough_space(a,b,r) = hough_space(a,b,r)+1;
end
end
end
end
% 搜索超过阈值的聚集点
max_para = max(max(max(hough_space)));
index = find(hough_space>=max_para*p);
length = size(index);
hough_circle = false(m,n);
for i=1:ecount
for k=1:length
par3 = floor(index(k)/(m*n))+1;
par2 = floor((index(k)-(par3-1)*(m*n))/m)+1;
par1 = index(k)-(par3-1)*(m*n)-(par2-1)*m;
if((rows(i)-par1)^2+(cols(i)-par2)^2<(r_min+(par3-1)*step_r)^2+5&&...
(rows(i)-par1)^2+(cols(i)-par2)^2>(r_min+(par3-1)*step_r)^2-5)
hough_circle(rows(i),cols(i)) = true;
end
end
end
% 打印检测结果
for k=1:length
par3 = floor(index(k)/(m*n))+1;
par2 = floor((index(k)-(par3-1)*(m*n))/m)+1;
par1 = index(k)-(par3-1)*(m*n)-(par2-1)*m;
par3 = r_min+(par3-1)*step_r;
fprintf(1,'Center %d %d radius %d\n',par1,par2,par3);
para(:,k) = [par1,par2,par3];

end

``````