日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

MATLAB求图片两圆圆心,求助:如何求此图中两圆的圆心距?

發布時間:2024/9/27 编程问答 37 豆豆
生活随笔 收集整理的這篇文章主要介紹了 MATLAB求图片两圆圆心,求助:如何求此图中两圆的圆心距? 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

對于你給出的圖片,我根據之前提到的思路編寫了以下程序。感覺還蠻準的。這個程序只能用于兩圓相交的情況。當小圓在大圓內部時,需要在其中加以判定。僅供參考。

clear;clc

c = imread('1.jpg');

cc = c;

tic

[m n] = size(c);

for i=1:m

index = find(~c(i,:));

if length(index) > 2

c(i,index(1)+1:index(end)-1)= true;

end

end

[x y] = find(~c);

maxdist = 0;

for i=1:length(x)

for j=i+1:length(x)

tmpdist = (x(i)-x(j))^2+(y(i)-y(j))^2;

if tmpdist > maxdist

maxdist = tmpdist;

pair = [i j];

end

end

end

x1 = x(pair(1));y1 = y(pair(1));

x2 = x(pair(2));y2 = y(pair(2));

dist = (y2-y1)*(x-x1)-(x2-x1)*(y-y1);

index = find(dist == max(dist));

x3 = x(index(1));y3=y(index(1));

index = find(dist == min(dist));

x4 = x(index(1));y4=y(index(1));

dist1 = (x3-x1)^2+(y3-y1)^2+(x4-x1)^2+(y4-y1)^2;

dist2 = (x3-x2)^2+(y3-y2)^2+(x4-x2)^2+(y4-y2)^2;

if dist2 < dist1

tmpx = x2; tmpy = y2;

x2 = x1; y2 = y1;

x1 = tmpx; y1 = tmpy;

end

centerx1 = ((y3-y1)*(x4^2+y4^2-x1^2-y1^2)-(y4-y1)*(x3^2+y3^2-x1^2-y1^2))/((y3-y1)*(x4-x1)-(y4-y1)*(x3-x1))/2;

centery1 = ((x3-x1)*(x4^2+y4^2-x1^2-y1^2)-(x4-x1)*(x3^2+y3^2-x1^2-y1^2))/((x3-x1)*(y4-y1)-(x4-x1)*(y3-y1))/2;

r1 = sqrt((x1-centerx1)^2+(y1-centery1)^2);

dist = (x-centerx1).^2+(y-centery1).^2;

index = find(dist < (r1+3)^2);

x(index)=[];

y(index)=[];

dist = (y2-y1)*(x-x1)-(x2-x1)*(y-y1);

index = find(dist == max(dist));

x5 = x(index(1));y5=y(index(1));

index = find(dist == min(dist));

x6 = x(index(1));y6=y(index(1));

centerx2 = ((y5-y2)*(x6^2+y6^2-x2^2-y2^2)-(y6-y2)*(x5^2+y5^2-x2^2-y2^2))/((y5-y2)*(x6-x2)-(y6-y2)*(x5-x2))/2;

centery2 = ((x5-x2)*(x6^2+y6^2-x2^2-y2^2)-(x6-x2)*(x5^2+y5^2-x2^2-y2^2))/((x5-x2)*(y6-y2)-(x6-x2)*(y5-y2))/2;

r2 = sqrt((x2-centerx2)^2+(y2-centery2)^2);

toc

imshow(cc);

hold on;

plot(centery1,centerx1,'r+');

plot(centery1+r1*cos(pi*(0:100)/50),centerx1+r1*sin(pi*(0:100)/50),'b-')

plot(centery2,centerx2,'r+');

plot(centery2+r2*cos(pi*(0:100)/50),centerx2+r2*sin(pi*(0:100)/50),'b-')

總結

以上是生活随笔為你收集整理的MATLAB求图片两圆圆心,求助:如何求此图中两圆的圆心距?的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。