如果边界像素值为0,其他地方不为0,可以先二值化,将背景置为1,然后图像的矩阵取反,即 I = ~I,连通区域标记,最后可以用bwboundaries函数提取顺时针排列的边界点像素坐标,具体形式可以help bwboundaries,有例子很好懂
index(:,1) = m;
index(:,2) = n;
b = sortrows(index,1); % 按m排序
c = sortrows(index,2); % 按n排序
用MATLAB处理除了提到的“灰度(转换)”去除噪声,如果就直接二值化得话,对于一副对比度不大的,是不容易清楚地区分的。可以试试灰度拉伸,灰度值均衡化,自适应阈值分割等图像增强的方法。
尺寸测量也就是特征提取,面积可以用扫描法计算区域的像素值,如
sum=0;
for i=30:480
for j=5:505
if j2(i,j)>=05 (j2为处理图像)
sum=sum+1;
end如果是计算轮廓长度,用边缘提取的计算再用扫描法计算像素值点。
MATLAB图像处理的算法用到得程序都不难,只要你的图像处理流程试出来的效果好,计算相对都比较简单。
%这是我参加建模竞赛编写的程序
%你在MATLAB中运行一下就完全明白
%必须在MATLAB70及以上版本才可实现
BW=imread('imagebmp');
Imshow(BW);
figure;imcontour(BW);
%BWBOUNDARIES 这个函数可提取各椭圆边界坐标
CE=bwboundaries(BW);
%CE为一元包数组,返回的各椭圆边界坐标及外边框坐标
O1=CE{2,1};
n=length(O1);
h1=min(O1(1:n,1));
Rmin=h1;
k=1;
for i=1:n
if O1(i,1)==h1
r11(k)=O1(i,2);
k=k+1;
end
end
RminC=mean(r11);
h2=max(O1(1:n,1));
Rmax=h2;
k=1;
for i=1:n
if O1(i,1)==h2
r12(k)=O1(i,2);
k=k+1;
end
end
RmaxC=mean(r12);
h3=min(O1(1:n,2));
Cmin=h3;
k=1;
for i=1:n
if O1(i,2)==h3
r13(k)=O1(i,1);
k=k+1;
end
end
CminR=mean(r13);
h4=max(O1(1:n,2));
Cmax=h4;
k=1;
for i=1:n
if O1(i,2)==h4
r14(k)=O1(i,1);
k=k+1;
end
end
CmaxR=mean(r14);
R1o1=mean([(Rmin+Rmax)/2,(CminR+CmaxR)/2]);
Ro1=fix(R1o1);
C1o1=mean([(Cmin+Cmax)/2,(RminC+RmaxC)/2]);
Co1=fix(C1o1);
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
O2=CE{3,1};
n=length(O2);
h1=min(O2(1:n,1));
Rmin=h1;
k=1;
for i=1:n
if O2(i,1)==h1
r21(k)=O2(i,2);
k=k+1;
end
end
RminC=mean(r21);
h2=max(O2(1:n,1));
Rmax=h2;
k=1;
for i=1:n
if O2(i,1)==h2
r22(k)=O2(i,2);
k=k+1;
end
end
RmaxC=mean(r22);
h3=min(O2(1:n,2));
Cmin=h3;
k=1;
for i=1:n
if O2(i,2)==h3
r23(k)=O2(i,1);
k=k+1;
end
end
CminR=mean(r23);
h4=max(O2(1:n,2));
Cmax=h4;
k=1;
for i=1:n
if O2(i,2)==h4
r24(k)=O2(i,1);
k=k+1;
end
end
CmaxR=mean(r24);
R2o2=mean([(Rmin+Rmax)/2,(CminR+CmaxR)/2]);
Ro2=fix(R2o2);
C2o2=mean([(Cmin+Cmax)/2,(RminC+RmaxC)/2]);
Co2=fix(C2o2);
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
O3=CE{4,1};
n=length(O3);
h1=min(O3(1:n,1));
Rmin=h1;
k=1;
for i=1:n
if O3(i,1)==h1
r31(k)=O3(i,2);
k=k+1;
end
end
RminC=mean(r31);
h2=max(O3(1:n,1));
Rmax=h2;
k=1;
for i=1:n
if O3(i,1)==h2
r32(k)=O3(i,2);
k=k+1;
end
end
RmaxC=mean(r32);
h3=min(O3(1:n,2));
Cmin=h3;
k=1;
for i=1:n
if O3(i,2)==h3
r33(k)=O3(i,1);
k=k+1;
end
end
CminR=mean(r33);
h4=max(O3(1:n,2));
Cmax=h4;
k=1;
for i=1:n
if O3(i,2)==h4
r34(k)=O3(i,1);
k=k+1;
end
end
CmaxR=mean(r34);
R3o3=mean([(Rmin+Rmax)/2,(CminR+CmaxR)/2]);
Ro3=fix(R3o3);
C3o3=mean([(Cmin+Cmax)/2,(RminC+RmaxC)/2]);
Co3=fix(C3o3);
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
O4=CE{5,1};
n=length(O4);
h1=min(O4(1:n,1));
Rmin=h1;
k=1;
for i=1:n
if O4(i,1)==h1
r41(k)=O4(i,2);
k=k+1;
end
end
RminC=mean(r41);
h2=max(O4(1:n,1));
Rmax=h2;
k=1;
for i=1:n
if O4(i,1)==h2
r42(k)=O4(i,2);
k=k+1;
end
end
RmaxC=mean(r42);
h3=min(O4(1:n,2));
Cmin=h3;
k=1;
for i=1:n
if O4(i,2)==h3
r43(k)=O4(i,1);
k=k+1;
end
end
CminR=mean(r43);
h4=max(O4(1:n,2));
Cmax=h4;
k=1;
for i=1:n
if O4(i,2)==h4
r44(k)=O4(i,1);
k=k+1;
end
end
CmaxR=mean(r44);
R4o4=mean([(Rmin+Rmax)/2,(CminR+CmaxR)/2]);
Ro4=fix(R4o4);
C4o4=mean([(Cmin+Cmax)/2,(RminC+RmaxC)/2]);
Co4=fix(C4o4);
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
O5=CE{6,1};
n=length(O5);
h1=min(O5(1:n,1));
Rmin=h1;
k=1;
for i=1:n
if O5(i,1)==h1
r51(k)=O5(i,2);
k=k+1;
end
end
RminC=mean(r51);
h2=max(O5(1:n,1));
Rmax=h2;
k=1;
for i=1:n
if O5(i,1)==h2
r52(k)=O5(i,2);
k=k+1;
end
end
RmaxC=mean(r52);
h3=min(O5(1:n,2));
Cmin=h3;
k=1;
for i=1:n
if O5(i,2)==h3
r53(k)=O5(i,1);
k=k+1;
end
end
CminR=mean(r53);
h4=max(O5(1:n,2));
Cmax=h4;
k=1;
for i=1:n
if O5(i,2)==h4
r54(k)=O5(i,1);
k=k+1;
end
end
CmaxR=mean(r54);
R5o5=mean([(Rmin+Rmax)/2,(CminR+CmaxR)/2]);
Ro5=fix(R5o5);
C5o5=mean([(Cmin+Cmax)/2,(RminC+RmaxC)/2]);
Co5=fix(C5o5);
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
hold on
%依次求得的是E,A,B,D,C各椭圆中心坐标
Ro=[R1o1,R2o2,R3o3,R4o4,R5o5]
Co=[C1o1,C2o2,C3o3,C4o4,C5o5]
%标出了各中心
plot(Co,Ro,'r');
v=-50;
text(Co1+v,Ro1+v,['E ( ',num2str([Co1,Ro1]),' )'],'Fontsize',8,'color','g');
text(Co2+v-30,Ro2+v-30,['A ( ',num2str([Co2,Ro2]),' )'],'Fontsize',8,'color','g');
text(Co3+v,Ro3+v,['B ( ',num2str([Co3,Ro3]),' )'],'Fontsize',8,'color','g');
text(Co4+v,Ro1+v,['D ( ',num2str([Co4,Ro4]),' )'],'Fontsize',8,'color','g');
text(Co5+v,Ro5+v,['C ( ',num2str([Co5,Ro5]),' )'],'Fontsize',8,'color','g');
%以上是运用的MATLAB7x中现成的函数bwboundaries,自己编写的程序我也有,不%过程序比较长,您若想要可另找我
以上就是关于用matlab对一张圆的图像轮廓提取后,知道了圆的边界,怎么确定边界上点的像素坐标高分悬赏啊啊啊全部的内容,包括:用matlab对一张圆的图像轮廓提取后,知道了圆的边界,怎么确定边界上点的像素坐标高分悬赏啊啊啊、求助:MATLAB处理图像,已提取边缘,也得到了边缘的二值矩阵,提取坐标是用【m,n】 = find(BW==1)、关于用matlab处理图像的问题,如何将下进行边缘提取,得到比较清晰的轮廓,最好是能寻找到偏心孔的坐标等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)