نقل قول:
نوشته اصلي بوسيله mahdiii
X نشان دهنده مختصات x یا همون ستونهای پیکسل های پیرامونته که هست n*1
Y نشان دهنده مختصات y یا همون سطرهای پیکسل های پیرامونته که هست n*1
پس باید xc رو که میانگین x هاست از X کم کنی و همچنین yc رو که میانگین y هاست از Y کم کنی یعنی
xc=mean(X)
yc=mean(Y)
XX=X-xc
YY=Y-yc
XX , YY بردارهای مربوط به xها و yهاست که الآن نرمالیزه شده اند و اگه میانگین اونها رو حساب کنی میشه 0و0 (zero mean)
حالا یه ماتریس n*2 ایجاد می کنی به این صورت که ستون اولش x ها و ستون دومش yهاست یعنی
[XX,YY]
و کواریانس اونو حساب می کنی همون طوری که گفتم و بعدش بردارهای ویژه و مقادیر ویژشو تو متلب با eig
که بهت بردار ویژه و مقادیر ویژه رو برمی گردونه
یه راهی به نظرم رسید که ساده تره شاید، اینه که فاصله هر نقطه روی پیرامونو تا تک تک نقاط محاسبه کن که میشه با مرتبه زمانی n2 بعدش اون دونقطه ای که بیشترین فاصله رو دارند میشه همون قطر اصلیت و عمود بر این قطر میشه قطر دیگت. این روش شاید برای همه برگها جواب نده و خطا داشته باشه. باید تست کنی
|
خیلی ممنون از توجهت مهدی جان
من اون چیزی رو که از حرفات متوجه شدم انجام دادم ولی باز به نتیجه نرسیدم.نمیدونم شاید کار من مشکل داشته. برنامه رو میزارم اگه زحمتی نیست برات یه چک بکن ببین اشکال کار من کجاست.
من یک بار اندازه طول و عرض رو با imtool گرفتم به ترتیب 377 و 305 و یک بارم توسط کدی که نوشتم که جواب هاش کلی با این عددها فرق داشت.
در ضمن اونجایی که گفتی XX , YY بردارهای مربوط به xها و yهاست که الآن نرمالیزه شده اند و اگه میانگین اونها رو حساب کنی میشه 0و0 (zero mean)، من امتحان کردم zero mean نشد.
clc
clear all
Image = imread('IM.jpg');
Image=imresize(Image,0.25);
dImage = im2double(Image);
logicalImage = im2bw(dImage, 0.75);
BW=imcomplement(logicalImage);
BW = bwareaopen(BW,30);
BW2 = bwmorph(BW,'remove'); % get the contour
[X Y]=find(BW2==1);
xc=mean(X);
yc=mean(Y);
xx=X-xc;
yy=Y-yc;
r=[xx yy];
co=cov(r);
[v d]=eig(co)
اینم لینک عکس یک برگ برای نمونه
http://s13.postimage.org/q70lk4u2f/image.jpg