![]() |
خواهش می کنم من نگفتم این کارو برای تک تک تصاویر دستی انجام بدی. تو می تونی از همون بردارهای ویژه استفاده کنی و زاویه رو به دست بیاری. مثلا بردارهای ویژه ات اگه باشن (0.7071,0.7071) , (0.7071,0.7071-) ---> (x,y)
در این صورت tetta=atan2(v(2,2),v(1,2))*180/pi یعنی tetta=atan2(y,x)*180/pi که به همین اندازه می چرخونی در جهت منفی res_image=imrotate(BW2,-tetta); و بعد اون کارا رو می کنی اینم کدش clc clear all close all Image = imread('33.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 %% [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([-400,400]) ylim([-400,400]) %% %res_image=imcomplement(dImage); tetta=atan2(v(2,2),v(1,2))*180/pi; res_image=imrotate(BW2,-tetta); [row,col]=size(res_image); [mxc,indc]=max(sum(res_image,1)); [mxr,indr]=max(sum(res_image,2)); %%------------------------------------------------------------------------- p1.x=find(res_image(indr,:)==1,1); p1.y=indr; p2.x=col-find(res_image(indr,end:-1:1)==1,1)+1; p2.y=indr; p3.y=find(res_image(:,indc)==1,1); p3.x=indc; p4.y=row-find(res_image(end:-1:1,indc)==1,1)+1; p4.x=indc; figure;imshow(mat2gray((res_image))); %%------------------------------------------------------------------------- hold on;plot(p1.x,p1.y,'*','markersize',10); hold on;plot(p2.x,p2.y,'*','markersize',10); hold on;plot(p3.x,p3.y,'*','markersize',10); hold on;plot(p4.x,p4.y,'*','markersize',10); hold on;plot([p1.x,p2.x],[p1.y,p2.y],'--r'); hold on;plot([p3.x,p4.x],[p3.y,p4.y],'--r'); %%------------------------------------------------------------------------- |
سلام مهدی جان آقا من خیلی وقت نیومدم اینجا سر بزنم دستت درد نکنه کدت جواب داد و خیلی هم خوب جواب داد.همونطور که قبلا گفتم ای برا یه قسمت از پروژم بود، حالا باید روش انجام این کارو بطور ریاضی وار شرح بدم و از اونجایی که من پردازش تصویرم در سطح مبتدیه یه چندتا سوال داشتم .اگه زحمتی نیست برات یه کمکی به من بکن یا اگه وقت نداری چندتا رفرنس معرفی کن من بخونم.
1-چرا ما مرکز شکل رو مرکز مختصات قرار دادیم و بعد کواریانس گرفتیم؛نمیشد از همون X,Y کواریانس گرفت؟ Y=-rr;علامت منفی اینجا چه حکمی داره؟شکل رو نسبت به Y قرینه میکنه؟ X=cc; 2-میشه توضیح بدی در چطوری زاویه tetta رو با استفاده از بردار ویژه پیدا می کنی؟بصورت یه مثال ساده ریاضی وار tetta=atan2(v(2,2),v(1,2))*180/pi;آیا در دو بردار یک جواب رو میده؟یعنی فرق نمیکنه کدومو بزاریم؟ res_image=imrotate(BW2,-tetta);چرا tetta- باید باشه؟چرا در جهت مثبت نمی چرخونیم ؟ این زاویه tetta بین بردار ویژه و کدوم محوره، اینو لازم دارم چون برا 2تا از برگ ها زاویه رو درست بدست نیورده http://s18.postimage.org/uidawvct5/untitled1.png http://s16.postimage.org/wo6n1cdo5/untitled2.png |
درخواست راهنمایی
سلام
من دارم در مورد پیدا کردن ابعاد یک شکل (طول عرض ارتفاع ) تحقیق میکنم استادم دو حالت رو برای تحقیق بهم پیشنهاد داده یکی شی وقتی طولش از طول تصویر کمتر هست و دیگری زمانی که طول شی از طول تصویر بیشتر . استادم ازم خواسته که روشهای بدست آوردن طول شی در این دو حالت رو پیدا کنم . لطفا راهنماییم کنید از کجا باید شروع کنم من هیچ اطلاعاتی ندارم . راستی باید با #c پیاده سازی کنم چیزی رو که دنبالش هستم |
اگه دوست داری میتونی یه نمونه از اون عکس برگهاتو بذاری . فکر میکنم خیلی ساده تر از اینها بتونی اون کارهایی رو که میخوای بشه انجام داد :)
|
من متوجه نشدم! طول شی که از طول تصویر کمتر است بیشتر است؟!!!
واضح توضیح بدین! |
زمان محلي شما با تنظيم GMT +3.5 هم اکنون ۰۶:۵۱ بعد از ظهر ميباشد. |
Powered by vBulletin® Version 3.8.3
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Search Engine Friendly URLs by vBSEO 3.1.0 ©2007, Crawlability, Inc.