نمايش پست تنها
قديمي ۰۹-۲۷-۱۳۹۱, ۰۹:۱۲ بعد از ظهر   #7 (لینک دائم)
mahdiii
Active users
 
آواتار mahdiii
 
تاريخ عضويت: اسفند ۱۳۸۸
محل سكونت: مشهد
پست ها: 355
تشكرها: 27
167 تشكر در 131 پست
My Mood: Khoshhal
پيش فرض

من یکم تغییر دادم. لازم نیست پیرامون رو به دست بیاری. با همون تصویر دودویی شده (که پیکسلهای داخلی رو هم شامل میشه) نتیجه بهتره. برای تست می تونی تصویرو بچرخونی و کدو اجرا کنی دوباره
clc
clear all
close all
Image = imread('image.jpg');
if(ndims(Image==3))
Image=rgb2gray(Image);
end
Image=imresize(Image,0.25);
dImage = im2double(Image);
logicalImage = im2bw(dImage, 0.9);
BW=imcomplement(logicalImage);
BW2 = bwareaopen(BW,30);
%BW2 = bwmorph(BW,'remove'); % get the contour
%% Rotation
%BW2=imrotate(BW2,30);
%%
[rr cc]=find(BW2==1);

Y=-rr;
X=cc;
xc=mean(X);
yc=mean(Y);
xx=X-xc;
yy=Y-yc;
co=cov([xx yy]);
[v d]=eig(co);

length_diam1=2*sqrt(d(1,1))*v(:,1); % the length of diameter
length_diam2=2*sqrt(d(2,2))*v(:,2); % the length of diameter
figure;
plot(xx,yy,'.b');
hold on;plot([0,length_diam1(1)],[0,length_diam1(2)],'r');
hold on;plot([0,length_diam2(1)],[0,length_diam2(2)],'r');

xlim([-100,100])
ylim([-100,100])
mahdiii آفلاين است   پاسخ با نقل قول
از mahdiii تشكر كرده است:
aramis2000 (۰۹-۲۸-۱۳۹۱)