![]() |
حذف پیش زمینه از تصویر
تصویری از پشت دست فردی داریم و با استفاده از یکی از الگوریتم های لبه یابی کانتور آن را به دست آورده ایم. حال می خواهیم با استفاده از این کانتور (و یا روش بهتری) شیء را از تصویر جدا کرده و پیش زمینه را حذف کنیم. چه کدی باید نوشته شود؟
|
ببینید بهتره برای این کار از عمل استانه گیری استفاده کنین.
یعنی بیاین بر اساس رنگ دست و تبدیلاتی مثل hsv و تعیین مقادیر استانه برای این مولفه ها تصویرو باینری کنین. که پیکسلهای دست سفید و بقیه نقاط سیاه خواهند بود و نیازی به عمل کانتور نیست. |
بله حرف شما درسته. من یه سری روش های مختلف رو اعمال کردم ولی هیچ کدوم نتیجه ی دلخواه منو تولید نکرد. مثلا از 300 تا عکس ممکنه 6 تاشون خراب بشه. واسه همین میخوام یه جور دیگه کار کنم.
http://i57.tinypic.com/2n8mrlk.jpg این تصویر حاصل از روش Otsu هست. از اونجا که همه ی تصاویر اون ناحیه ی دایره ای وسط تصویر رو دارن، یک رویکرد می تونه این باشه که با توجه به این دایره، یک ماسک برای تصاویر درست کنیم و با ضرب اون در تصویر، ناحیه ی دست رو جدا کنیم. حالا مشکل من اینه که نمی دونم این ماسک رو چطور طراحی کنم. ایده ای دارید؟ |
سلام. یکی از تصاویر پر چالشتون رو بزارید اینجا ( تصویر اصلی ) تا روش کار کنیم
|
تصویر اصلی
2(ها)ضميمه
تصویر اصلی و تصویر حاصل از روش ExtenedeMaxima با آستانه ی 83
من به جای استفاده از لبه یابی به آستانه گیری رو آوردم. ولی با توجه به رزولوشن پایین تصاویر یه کم به مشکل خوردم. در نظر دارم برای این تصویر باینری که در اینجا می بینید، یک ماسک طراحی کنم تا بتونم با استفاده از اون قسمت دست رو جدا کنم. |
1(ها)ضميمه
نقل قول:
|
آره خوبه. پایینشو دستی عوض کردین یا الگوریتمی؟
|
قسمت پایین خیلی خوب لبه ها در نمیومدن. من بصورت غیر هوشمند کات کردم. احتمالا نباید تصاویر تو قسمت پایین اطلاعات مفیدی داشته باشن. راحت کات کنید خوب .
|
آخه من دارم رو یک مجموعه تصویر کار می کنم. نمی تونم دونه دونه پردازششون کنم. تعدادشون زیاده (1500 تا)
باید یه راهی پیدا کنم که خودکار باشه |
نگاه کنین چون عکسهاتون مناسب نیستن یعنی رنگ دست و پس زمینه اختلاف انچنانی ندارن روشهای استانه گیری اون هم یک بخشی مناسب نیست همون با لبه یابی باشه یهتره.
شما اول عمل لبه یابیو با کنی انجام بدین خیلی خوب دستو در میاره. من امتحان کردم. و بعدش به راحتی با دستور imfill داخل دستو پر کنین. قبل این کارها هم امکان داره لبه های دست یکم از هم جدا افتاده باشن چند پیکسل که احتمالش اگه از کنی استفاده کنی کمتره ولی قبل اینکه داخل دستو پر کنی چند تا عمل مورفولوژی انجام بده که این لبه ها به هم متصل بشن. اگه میخوای دقیقتر روش کاربشه با میلم درتماس باش |
قسمت پایین رو که نمیخواین دونه دونه کات کنید. شما تصاویر را بصورت یک حلقه پردازش میکنین. سطرهای اخر هر تصویر رو حذف میکنیم.
مرحله اول کات کردن. مرحله دوم لبه یابی مرحله سوم fill کردن ناحیه درون. اگه توضیحات کافیه که هیچ اگر نه یک مجموعه حداقل 100 تایی بذارین من چک کنم. کد رو براتون میفرستم . |
مشکل اینه که تصاویر در یک وضعیت نیستند. یکیشون بالاتره، یکیشون پایین تره، یکیشون مورب از چپ به راسته، یکیشون برعکسه، کلا نمیشه گفت مثلا 15 ردیف آخر رو صفر کن و بعد قضیه حل بشه.
|
شما لازم نیس چند خط اخرو اون کار کنین!!! فقط کافیه خط اخر تصویرو سفید کنین یعنی سطر اخر تصویر اون طوری باعث میشه یه جزع متصل داشته باشین که همون دسته که با لبه ها به دست اومده و با دستور imfill داخلش پر میکنه با سفید همین!
|
نقل قول:
سطرهای پایین تصویر اصلی رو سفید کنن یا سطر های پایین تصویر حاصل از لبه یابی رو ؟؟؟ اگه دومی منظورتون هست که این کار باعث میشه علاوه بر ناحیه دست یک نوار سفید رنگ هم تو خروجی داشته باشن که رو مراحل بعدی اثر میگذاره . اگه تو تصویر اصلی مد نظرتون هست که باز این نوار منجر به ایجاد یه لبه مصنوعی میشه که مجددا بعدا منجر به نقص الگوریتم میشه. |
فقط سطر اخرو !!! با این کار باعث میشه کانتور دست بسته بشه و بشه داخلشو پر کرد بعد که این کار انجام شد شما سطر اخر تصویرو کلا حذف کنین به همین راحتی
|
clc
clear all close all %% image=imread('1.jpg'); %% image=image(:,:,1); [row,col]=size(image); figure;imshow(mat2gray(image)); %% ee=edge(image,'canny',[0.1,0.9]); figure;imshow(mat2gray(ee)); ee(end,:)=1; ff=imfill(ee,'holes'); ff(end,:)=0; figure;imshow(mat2gray(ff)); %% اینم نتیجه بفرمایید.. |
ممنون از توضیحات دوستان.
من فکر می کنم باید اون لبه های پایین تصویر رو اول حذف کنم ولی نمی دونم با چه فیلتری این کار رو انجام بدم. فیلترهای میانه، میانگین، گاوسین و ترکیب های مختلف اون ها رو امتحان کردم. هیچ کدوم جواب نداد. به نظر شما اون لبه ها رو چطور میشه حذف کرد (تو این پروژه مهمه که همه چیز به طور الگوریتمی و هوشمند انجام بشه)؟ فکر می کنم حذفش به شدت باعث بهبود تصویر بشه و روش های آستانه یابی و لبه یابی هر دو نتیجه های قابل قبولی بدن. |
مشکل اینه که تو بعضی از تصاویر کانتور دست اصلا به اون ردیف های پایین نمی رسه. علتش هم لبه های غیرواقعی پایین تصویره که شبیه سایه هستند.
|
شما تصاویر خرابو بزار اینجا .. با توضیحات در مورد تصویر نگو/ بدون دیدن نمیشه نظر داد. اون کد منو اجرا کردی؟
تشکر هم بدین خوبه ها بد نیس! |
بله کدتون رو اجرا کردم. برای تعدادی از تصاویر خوبه و برای تعدادی نصف تصویر رو کلاحذف کرده و به پر کردن ناحیه نمی رسه. مقدار آستانه ی لبه یاب "کَنی" باید احتمالا به طور وفقی تعیین بشه.
حالا من رو عددش کار می کنم. باز اگه جواب نداد برای نمونه اینجا تصویر می ذارم. |
من یه کم مقدار آستانه رو تغییر دادم. جواب ها خوب بودند. فقط یه مشکل کوچیک پیدا شد و اون هم اینه که دره ی بین دو تا انگشت ناپیوستگی پیدا می کنه.
http://i57.tinypic.com/e0ob9y.jpg با عملیات مورفولوژیکی (dilation و erosion) سعی کردم ناپیوستگی رو از بین ببرم اما تصویر رو اینجوری خراب کرد. http://i61.tinypic.com/2iaa6b9.jpg به نظر شما نوع structring element رو باید عوض کنم؟ خط، مستطیل، دیسک رو امتحان کردم |
زمان محلي شما با تنظيم 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.