shabnamat 32 اشتراک گذاری ارسال شده در 11 اسفند، 2015 سلام. من یه دیا دارم این شکلی مختصات x, y دایره رو در آوردم ریختم تو یه ماتریس حالا که می خوام خودم با plot رسمش کنم شکله میشه اینجوری چرا اینجوری نقاطو وصل کرد ترتیبشون اشتباش؟ چطور درستش کنم که همون دایره رو بده؟ دستورم: [i,j]=find(y); xy=[i,j]; plot(xy(:,1),xy(:,2)) ام فایلشم پیوست کردم New folder.rar 2 لینک به دیدگاه
Imaaan 17059 اشتراک گذاری ارسال شده در 11 اسفند، 2015 سلام. من یه دیا دارم این شکلی[ATTACH=CONFIG]20139[/ATTACH] مختصات x, y دایره رو در آوردم ریختم تو یه ماتریس حالا که می خوام خودم با plot رسمش کنم شکله میشه اینجوری چرا اینجوری نقاطو وصل کرد ترتیبشون اشتباش؟ چطور درستش کنم که همون دایره رو بده؟ دستورم: [i,j]=find(y); xy=[i,j]; plot(xy(:,1),xy(:,2)) ام فایلشم پیوست کردم سلام چون داری با دستور find مختصات نقاط رو پیدا می کنی، ترتیبشون اونجوری نیست که روی دایره قرار دارن، در نتیجه همون شکلی میده که خودت رسم کردی، می تونی نقطه ها رو جدا از هم رسم کنی که این مشکل پیش نیاد. اما دو نکته دیگه هم وجود داره، شما توی تصویر شماره سطر و ستون داری که اما برای نقطه طول و عرض که اینا بر عکس هم هستن، یعنی شماره ستون میشه طول یا x نقطه. اما نکته دوم، شماره سطر ها توی تصویر یا ماتریس از بالا شروع میشه و روی محور yها هر چی به سمت بالا بریم عرض نقطه زیاد میشه، پس باید موقع رسم اینم در نظر بگیریم. clear load matlab.mat subplot(121) imshow(y) [i,j]=find(y); xy=[i,j]; subplot(122) plot(xy(:,2),192 - xy(:,1),'.','MarkerSize',5) axis([0 192 0 192]) axis square 2 لینک به دیدگاه
shabnamat 32 مالک اشتراک گذاری ارسال شده در 11 اسفند، 2015 فهمیدم مرسی . اما یه مشکل دیگه تصویر اصلی من 64*64 هست مرزی که دارم ازش همون بالایی 192*192 . حالا این دو تا رو می خوام بندازم رو هم نشون بدم (اگه بخوام سایز تصویر اصلی رو تغییر ندم) clear load orig.mat imshow(x) hold on load matlab.mat y=imresize(y,1/3); [i,j]=find(y); xy=[i,j]; plot(xy(:,2),64 - xy(:,1),'.','MarkerSize',5) ولی مرزش دیگه مثل قبل یه خطی نمی شه . مال imresize هست؟ چکار کنم پس؟ 2 لینک به دیدگاه
Imaaan 17059 اشتراک گذاری ارسال شده در 11 اسفند، 2015 فهمیدم مرسی . اما یه مشکل دیگهتصویر اصلی من 64*64 هست مرزی که دارم ازش همون بالایی 192*192 . حالا این دو تا رو می خوام بندازم رو هم نشون بدم (اگه بخوام سایز تصویر اصلی رو تغییر ندم) clear load orig.mat imshow(x) hold on load matlab.mat y=imresize(y,1/3); [i,j]=find(y); xy=[i,j]; plot(xy(:,2),64 - xy(:,1),'.','MarkerSize',5) ولی مرزش دیگه مثل قبل یه خطی نمی شه . مال imresize هست؟ چکار کنم پس؟ تغییر سایز تصویر خیلی کار جالبی نیست، مممکنه مشکلاتی توی تصویرمون ایجاد کنه. تصویر اصلیت رو بذار، ببینم مشکل کجاست. 1 لینک به دیدگاه
shabnamat 32 مالک اشتراک گذاری ارسال شده در 12 اسفند، 2015 تغییر سایز تصویر خیلی کار جالبی نیست، مممکنه مشکلاتی توی تصویرمون ایجاد کنه.تصویر اصلیت رو بذار، ببینم مشکل کجاست. تصویر اصلی رو گذاشتم. ممنون orig.rar 2 لینک به دیدگاه
Imaaan 17059 اشتراک گذاری ارسال شده در 12 اسفند، 2015 تصویر اصلی رو گذاشتم. ممنون دستت درد نکنه. ببین وقتی از imresize استفاده می کنی، دیگه تصویر y دو مقداره باقی نمی مونه، می تونی اول به باینری تبدیلش کنی، بعد resizeش کنی. مقادیرش خیلی پیوسته تر شده، چون find هم مقادیر بزرگتر از صفر رو بهت میده، دیگه مرزها هم مثل قبل نیست. میشه یه ترشولدی در نظر گرفت که فقط مقادیر بزرگتر از اون رو مرز در نظر بگیره. البته برای نازک کردن هم میشه از عملگرهای مورفولوژی هم استفاده کرد. clear load orig.mat imshow(x) hold on load matlab.mat y=imresize(y,1/3); [i,j]=find(y>=2); xy=[i,j]; plot(xy(:,2),64 - xy(:,1),'.','MarkerSize',5) 2 لینک به دیدگاه
shabnamat 32 مالک اشتراک گذاری ارسال شده در 13 اسفند، 2015 ببخشید یه سوال دیگه . من یه مرز دیگه از این شکل دارم اما چون مقادیرش پیوسته هست بدردم نمی خوره .راهی هست بشه گسستش کرد جوری که شکلش زیاد به هم نخوره؟ رند کردم خیلی بد شد contin.rar 1 لینک به دیدگاه
Imaaan 17059 اشتراک گذاری ارسال شده در 13 اسفند، 2015 ببخشید یه سوال دیگه . من یه مرز دیگه از این شکل دارم اما چون مقادیرش پیوسته هست بدردم نمی خوره .راهی هست بشه گسستش کرد جوری که شکلش زیاد به هم نخوره؟ رند کردم خیلی بد شد خواهش می کنم، معذرت خواهی برای چی. برای چی می خوای گسسته ش کنی؟ من نگاه کردم یه مرز بسته ای هست که خیلی راحت با plot می تونی رسم کنی، مثل اون یکی هم نیست که فقط میشه به صورت نقاط جدا رسم کرد. 2 لینک به دیدگاه
shabnamat 32 مالک اشتراک گذاری ارسال شده در 13 اسفند، 2015 خواهش می کنم، معذرت خواهی برای چی. برای چی می خوای گسسته ش کنی؟ من نگاه کردم یه مرز بسته ای هست که خیلی راحت با plot می تونی رسم کنی، مثل اون یکی هم نیست که فقط میشه به صورت نقاط جدا رسم کرد. آره شکلش خوبه اما من با نقاط این مرزه کار دارم. یعنی هر نقطشو( x,y )می گیرم باهاش کار می کنم وقتی پیوسته هست همه چی اشتباه در میاد. نمی دونم متوجه شدید یا نه مثلا نمی تونم بگم برو تو تصویر اصلی اون پیکسلی که i, jاش سطر اول c (مرز) هست روبردار فلان کارش بکن! 1 لینک به دیدگاه
Imaaan 17059 اشتراک گذاری ارسال شده در 13 اسفند، 2015 آره شکلش خوبه اما من با نقاط این مرزه کار دارم. یعنی هر نقطشو( x,y )می گیرم باهاش کار می کنم وقتی پیوسته هست همه چی اشتباه در میاد. نمی دونم متوجه شدید یا نه مثلا نمی تونم بگم برو تو تصویر اصلی اون پیکسلی که i, jاش سطر اول c (مرز) هست روبردار فلان کارش بکن! خب راه حلش همون گرد کردن هست که خودت استفاده کردی، دقتش تقریبا به اندازه یه پیکسل هستش دیگه: clear load orig.mat imshow(x) hold on load contin.mat % y=imresize(y,1/3); % [i,j]=find(y>=2); % xy=[i,j]; plot(c(:,2),64 - c(:,1),'LineWidth',3) plot(round(c(:,2)),64 - round(c(:,1)),'r','LineWidth',3) 2 لینک به دیدگاه
shabnamat 32 مالک اشتراک گذاری ارسال شده در 16 اسفند، 2015 یه سوال دیگه : چجوری می شه این مرز رو آفست کرد یعنی به اندازه چند پیکسل بره داخلش و بیرونش که بین ایندو ناحیه بدست بیاد. یعنی یه چیزی مثل شکل زیر ناحیه زرد رو چطور پیدا می کنن؟ 1 لینک به دیدگاه
Imaaan 17059 اشتراک گذاری ارسال شده در 16 اسفند، 2015 یه سوال دیگه : چجوری می شه این مرز رو آفست کرد یعنی به اندازه چند پیکسل بره داخلش و بیرونش که بین ایندو ناحیه بدست بیاد. یعنی یه چیزی مثل شکل زیر ناحیه زرد رو چطور پیدا می کنن؟ سلام راحت ترین راهی که به نظرم می رسه، استفاده از کانولوشن دو بعدی هست: clear; border_img = false(400); border_img(100:300,[100 300]) = 1; border_img([100 300],100:300) = 1; figure; subplot(121) imshow(border_img) x = 10; mask = true(2*x + 1); Result = logical(conv2(double(border_img),double(mask),'same')); subplot(122) imshow(Result) 2 لینک به دیدگاه
shabnamat 32 مالک اشتراک گذاری ارسال شده در 16 اسفند، 2015 سلامراحت ترین راهی که به نظرم می رسه، استفاده از کانولوشن دو بعدی هست: clear; border_img = false(400); border_img(100:300,[100 300]) = 1; border_img([100 300],100:300) = 1; figure; subplot(121) imshow(border_img) x = 10; mask = true(2*x + 1); Result = logical(conv2(double(border_img),double(mask),'same')); subplot(122) imshow(Result) ممنون که وقت میذاری ، اینا رو تصویر جواب میده ولی رو مرز نه! نمی دونم چرا خودمم یه همچین کاری کردم البته با imdilate ولی نشد load contin.mat c=round(c); plot(c(:,1),c(:,2)) hold on v=imdilate(c,ones(3)); plot(v(:,1),v(:,2)) 2 لینک به دیدگاه
Imaaan 17059 اشتراک گذاری ارسال شده در 17 اسفند، 2015 ممنون که وقت میذاری ، اینا رو تصویر جواب میده ولی رو مرز نه! نمی دونم چراخودمم یه همچین کاری کردم البته با imdilate ولی نشد load contin.mat c=round(c); plot(c(:,1),c(:,2)) hold on v=imdilate(c,ones(3)); plot(v(:,1),v(:,2)) خواهش می کنم، خب imdilate برای تصویر هست دیگه، روی بردار که نمی تونه کاری انجام بده. اگه می خوای فقط این خطی که نمایش میده یه خورده عرضش بیشتر بشه، همون پارامتر LineWidth رو بزرگترش کن. تو این حالت چیزی که توی پنجره Figure نمایش میده تغییر می کنه، خروجی نداری که بعدا بتونی ازش استفاده کنی. ولی اگه می خوای که تصویر باینری داشته باشی که عرض مرزها رو هم بتونی توش تعیین کنی، قبلش باید همین مرزی که داری رو به یه تصویر باینری تبدیل کنی و بعد از imdilate استفاده کنی. 2 لینک به دیدگاه
ارسال های توصیه شده