تشخیص نوع شکل در تصویر - هفت خط کد انجمن پرسش و پاسخ برنامه نویسی

تشخیص نوع شکل در تصویر

+1 امتیاز

سلام

فرض کنید که یک تصویر با پس زمینه سفید و اشکالی به رنگ سیاه داریم.

و یک نقطه از یکی از این اشکال رو داریم. چطوری میشه تشخیص داد که این شکل چیه؟ مربع هست؟ مثلث هست؟ دایره هست؟ و یا اصلا چقدر به هر کدوم از اینا نزدیک تر هست؟

فقط خواهشا زیر دیپلم توضیح بدین و یا یه منبع زیر دیپلم معرفی کنین smiley

ممنون.

سوال شده آذر 14, 1392  بوسیله ی Bad Programmer (امتیاز 250)   2 3 11
دوباره تگ گذاری شد بهمن 22, 1392 بوسیله ی BlueBlade

3 پاسخ

+2 امتیاز
 
بهترین پاسخ

آقای ساتکی روش خوبیو اشاره کردن میتونین کنتور به دست بیارین با n تاروش (استفاده از عملگرهای مورفولوژی، استفاده از لبه یابها مثل کنی و ...) و بعد با استفاده از روشهای یافتن نقاط گوشه (nتا روش مثل هریس، موراوک و شی توماسی .و ..) ببینین چند تا گوشه داره . البته این روشهای گفته شده معمولا نیازی نیس کانتور براشون به دست بیاد خود تصویرو بدین خودش نقاط گوششو در میاره. 

و بعدش بسته به کاربردتون داره چون مثلا چهارتا دراورد براش فرقی نمیکنه مربع بوده یا یه چهارضلعی دیگه.

چندتا روش دیگم هست که میشه ازش استفاده کرد که خیلی سادس مثلا برای دایره شما میتونین مساحت و محیطشو به دست بیارین و بر اساس فرمول زیر ببین کدوم اشکال این ععدش نزدیکتره به عدد دایره.

s/p2= pi*r2/4*pi2*r2=1/4*pi

پس مساحت دایره رو که میشه تعداد پیکسلهای داخلش رو بر مربع محیطش (پیکسلهای کانتور) تقسیم میکنین عدد به دست اومده شد 1/4pi

هر کدوم از اشکال به این عدد نزدیکتر بودن میشن دایره. برای مربعم میشه نوشت.(فرمول مشابه)

 

یکی از روشهای دیگر که من خیلی دوسش دارم اینه که مرکز شکلو رو به دست بیارین. با میانگین گیری ایکسها و ایگرگهای پیکسلهای شکل و بعد با شروع از یک 

پیکسل کانتور شکل از سمت راسترین فاصله اون پیکسلو تا مرکز به دست بیارین و باز برای پیکسل بعدی روی کانتور و .... الگویی که به دست میاد و یافتن نقاط قله و ... میتونین  نوع شکلو پیدا کنین. این روش کلیه و برای بسیاری از شکلها جواب میده.

مثلا میدونیم که این الگو برای دایره یه خط راست میشه.  چون این فاصله مرکز تا اون پیکسهای کانتور ثابته (شعاع) و برای مربع مثلا یه شکل موجی میشه که چهار تا قله داره و...

 

 

 

پاسخ داده شده آذر 16, 1392 بوسیله ی mahdi (امتیاز 392)   7
انتخاب شد آذر 16, 1392 بوسیله ی Bad Programmer
روشی را که فرمودید دو تا مسئله در موردش وجود داره مسئله اول وقتی دایره دارای لبه های اعوجاجی باشه محیط ممکنه 2 برابر بشه  و مسئله دوم اشکال دارای ریخت های متفاوت می تونن در ناحیه  مشخص دارای مساحت های یکسان باشند.
اما در مورد روش دوم که فرمودید پس از محاسبه مرکز توسط مومنت بایستی stddev شعاع ها چک بشه چون ممکن یک شکلی که کاملاً با دایره متفاوت باشه ولی میانگین شعاع این شکل با یک دایره نویزی یکی باشه .توی دایره نویزی این اختلاف در کل محیط دایره با توزیع نرمال پخش شده ولی در شکل خاص ممکنه اختلاف در یک سمت شکل صفر و در طرف دیگر اختلاف شدید وجود داشته باشه
بله روش که زیاد هست. ایشون خواستن تنها بین چندتا شکل ساده تفاوت قائل شن!! فقط همین. من هم روشهای مبتنی بر معیارهای ساده و سیگنچر رو گفتم.
بله من میتونم روشیهایی رو بگم که شمام میدونین که نه تنها برای دو سه شگل، برای 100 تا شکلم تمایز قائل بشه! به علاوه مستقل بودن نسبت به نویز، چرخش و...
0 امتیاز
سلام.

باید فرض کنید که یک مورچه داره روی خط راه می ره. با یک نسبت تلورانس می تونید بفهمید که شکل در کجاها شکستگی یا انحنا داره. به سادگی می تونید متوجه بشید که شکل چی بوده.
پاسخ داده شده آذر 15, 1392 بوسیله ی You-See (امتیاز 36)   1 1 5
میشه یکم بیشتر توضیح بدین؟ یعنی چی روی خط راه میره؟
منظورم اینه که مثل مورچه که روی خط فقط دو سه تا پیکسل جلوترش رو می بینه، شما هم آرایه ای دو بعدی از چند پیکسل اطراف موقعیت جاری رو تحلیل کنید و به جلو برید. این طوری زوایا تقریبا دستتون میاد. البته روش بهتر رو دوستمون توضیح دادند.
+2 امتیاز

یک نکته ای که باید در ابتدا ذکر کنم توی پردازش تصویر پشت زمینه مشکی و آبجکت مخالف صفر هستش .

شما در ابتدا بایستی کانتور استخراج کنید که در اینجا کانتور و روش های استخراج اون رو توضیح دادم به علت وجود نویز مثلاً اگر از مثلث موجود در صفحه کانتور بگیرید ممکنه کانتور شما دارای 3 نقطه نباشه و تعداد بیشتری نقطه داشته باشید که در این صورت بایستی کانتور را quantize کنید که یکی از روش های معروف روش داگلاس هستش که نویز های موجود در کانتور را برای شما حذف می کنه.

  • وقتی کانتور آبجکت شما دارای سه نقطه باشه مثلث هستش البته زاویه بین اضلاع را جهت اطمینان هم می تونید چک کنید.
  • برای مربع بودن بایستی کانتور دارای 4 نقطه باشه و اضلاعی که کانتور را تشکیل می دن به صورت متوالی متعامد باشند تقریباً یک تلرانسی باید براش در نظر بگیرید.
  • برای دایره هم وقتی کوانتیزش می کنید ممکن تعداد اظلاع زیادی داشته باشه این روشی که الان ذکر می کنم به شما کمک می کنه که بتونید چند ضلغی را هم تشخیص بدید البته تعداد اضلاع اگر از یک حدی بشتر شد می تونید بگید دایره هستش. برای اینکار ابتدا مرکز کانتور را بدست بیارید بین هر 2 نقطه کانتور یک ضلغ دارید مرکز ضلع را بدست بیارید حالا زاویه خطی که مرکز را به این نقطه وصل می کنه را بدست بیارید حالا زاویه بدست آمده را بعلاووه 90 کنید تا زاویه متعامد را بدست بیارید حالا زاویه ضلع جاری را از این زاویه محاسبه شده کسر کنید از دایره باشه برای همه اضلاع بایستی این تفاضل صفر شه(البته با یک تلرانس)
پاسخ داده شده آذر 15, 1392 بوسیله ی مصطفی ساتکی (امتیاز 21,998)   24 34 75
ویرایش شده آذر 15, 1392 بوسیله ی مصطفی ساتکی
...