用matlab对一张圆的图像轮廓提取后,知道了圆的边界,怎么确定边界上点的像素坐标高分悬赏啊啊啊

用matlab对一张圆的图像轮廓提取后,知道了圆的边界,怎么确定边界上点的像素坐标高分悬赏啊啊啊,第1张

如果边界像素值为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处理图像的问题,如何将下进行边缘提取,得到比较清晰的轮廓,最好是能寻找到偏心孔的坐标等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/9820844.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-02
下一篇 2023-05-02

发表评论

登录后才能评论

评论列表(0条)

保存