تشخیص و توصیف ویژگی
درک مفهوم ویژگیها
هدف#
در این فصل، صرفاً تلاش خواهیم کرد تا درک کنیم ویژگیها (Features) چه هستند، چرا اهمیت دارند، چرا گوشهها مهم هستند و مواردی از این دست.
توضیحات#
بسیاری از شما بازیهای پازل (جورچین یا Jigsaw puzzle) را بازی کردهاید. شما تکههای کوچک زیادی از یک تصویر دریافت میکنید که در آن باید آنها را به درستی سرهم کنید تا یک تصویر بزرگ واقعی تشکیل شود. سوال این است که چگونه این کار را انجام میدهید؟ نظرتان در مورد انتقال همین تئوری به یک برنامه کامپیوتری چیست تا کامپیوتر بتواند پازل بازی کند؟ اگر کامپیوتر بتواند پازل بازی کند، چرا نتوانیم تصاویر زیادی از مناظر طبیعی واقعی را به کامپیوتر بدهیم و به آن بگوییم که همه آن تصاویر را به یک تصویر بزرگ بچسباند و به هم متصل کند (Image Stitching)؟ اگر کامپیوتر میتواند چندین تصویر طبیعی را به یکی متصل کند، نظرتان در مورد دادن عکسهای زیادی از یک ساختمان یا هر سازهای و درخواست از کامپیوتر برای ایجاد یک مدل سهبعدی از آن چیست؟
خب، سوالات و تصورات ادامه دارند. اما همه اینها به اساسیترین سوال بستگی دارد: چگونه پازل بازی میکنید؟ چگونه تکههای درهمریخته زیادی از تصویر را در یک تصویر بزرگ مرتب میکنید؟ چگونه میتوانید تصاویر طبیعی زیادی را به یک تصویر متصل کنید؟
پاسخ این است: ما به دنبال الگوهای خاص یا ویژگیهای خاصی هستیم که منحصر به فرد باشند، بتوان آنها را به راحتی ردیابی کرد و به راحتی با یکدیگر مقایسه نمود. اگر بخواهیم تعریفی برای چنین ویژگیای ارائه دهیم، ممکن است بیان آن در قالب کلمات دشوار باشد، اما میدانیم که آنها چه هستند. اگر کسی از شما بخواهد به یک ویژگی مناسب که بتوان آن را در چندین تصویر مقایسه کرد اشاره کنید، میتوانید به یکی از آنها اشاره کنید. به همین دلیل است که حتی کودکان کوچک نیز میتوانند به راحتی این بازیها را انجام دهند. ما به دنبال این ویژگیها در یک تصویر میگردیم، آنها را پیدا میکنیم، به دنبال همان ویژگیها در تصاویر دیگر میگردیم و آنها را همتراز میکنیم. همین و بس. (در پازل، ما بیشتر به پیوستگی تصاویر مختلف توجه میکنیم). تمام این تواناییها به طور ذاتی در ما وجود دارد.
بنابراین یک سوال اساسی ما به تعداد بیشتری گسترش مییابد، اما مشخصتر میشود: این ویژگیها چه هستند؟ (پاسخ باید برای یک کامپیوتر نیز قابل درک باشد).
بیان اینکه انسانها چگونه این ویژگیها را پیدا میکنند دشوار است؛ این قابلیت از قبل در مغز ما برنامهریزی شده است. اما اگر عمیقاً به برخی تصاویر نگاه کنیم و الگوهای مختلف را جستجو کنیم، چیز جالبی پیدا خواهیم کرد. برای مثال، تصویر زیر را در نظر بگیرید:

این تصویر بسیار ساده است. در بالای تصویر، شش تکه تصویر کوچک ارائه شده است. سوال از شما این است که مکان دقیق این تکهها را در تصویر اصلی پیدا کنید. چند نتیجه صحیح میتوانید بیابید؟
بخشهای A و B سطوح صافی هستند و در مساحت زیادی پخش شدهاند. پیدا کردن مکان دقیق این تکهها دشوار است.
بخشهای C و D بسیار سادهتر هستند. آنها لبههای ساختمان میباشند. شما میتوانید یک موقعیت تقریبی پیدا کنید، اما تعیین مکان دقیق همچنان دشوار است؛ زیرا الگو در همه جای امتداد لبه یکسان است. با این حال، در لبه، نسبت به مناطق دیگر متفاوت است. بنابراین یک لبه در مقایسه با ناحیه مسطح ویژگی بهتری است، اما هنوز به اندازه کافی خوب نیست (در پازل برای مقایسه پیوستگی لبهها خوب است).
در نهایت، E و F برخی از گوشههای ساختمان هستند و به راحتی میتوان آنها را پیدا کرد؛ زیرا در گوشهها، این تکه را به هر سمتی که حرکت دهید، متفاوت به نظر میرسد. بنابراین آنها را میتوان به عنوان ویژگیهای خوب در نظر گرفت. اکنون برای درک بهتر به سراغ تصویری سادهتر (و پرکاربردتر) میرویم:

دقیقاً مانند بالا، وصله آبی ناحیهای مسطح است و یافتن و ردیابی آن دشوار میباشد؛ وصله آبی را به هر سمتی ببرید یکسان به نظر میرسد. وصله سیاه دارای یک لبه است؛ اگر آن را در جهت عمودی (یعنی در امتداد گرادیان) حرکت دهید تغییر میکند، اما اگر در امتداد لبه (موازی با لبه) جابجا شود یکسان به نظر میرسد. و برای وصله قرمز، این یک گوشه است؛ به هر سمتی که وصله را حرکت دهید متفاوت به نظر میرسد، یعنی منحصر به فرد است. بنابراین اساساً، گوشهها به عنوان ویژگیهای خوب در یک تصویر در نظر گرفته میشوند. (نه فقط گوشهها، در برخی موارد لکهها یا blobها نیز ویژگیهای خوبی به حساب میآیند).
بنابراین اکنون به سوال خود پاسخ دادیم: "این ویژگیها چه هستند؟". اما سوال بعدی پیش میآید: چگونه آنها را پیدا کنیم؟ یا چگونه گوشهها را بیابیم؟ ما به صورت شهودی به این سوال پاسخ دادیم: به دنبال نواحی در تصاویر بگردید که هنگام جابجایی (به مقدار کم) در تمام جهات پیرامون خود، بیشترین تغییرات را داشته باشند. این مفهوم در فصول آینده به زبان کامپیوتر ترجمه خواهد شد. بنابراین یافتن این ویژگیهای تصویر تشخیص ویژگی (Feature Detection) نامیده میشود.
ما ویژگیها را در تصاویر پیدا کردیم. هنگامی که آن را پیدا کردید، باید بتوانید همان را در تصاویر دیگر نیز پیدا کنید. این کار چگونه انجام میشود؟ ما منطقهای در اطراف ویژگی را در نظر میگیریم، آن را با کلمات خودمان توضیح میدهیم، مانند اینکه "بخش بالایی آسمان آبی است، بخش پایینی منطقهای از یک ساختمان است، روی آن ساختمان شیشه وجود دارد و غیره" و شما همان منطقه را در تصاویر دیگر جستجو میکنید. اساساً، شما در حال توصیف ویژگی هستید. به طور مشابه، یک کامپیوتر نیز باید ناحیه اطراف ویژگی را توصیف کند تا بتواند آن را در تصاویر دیگر پیدا کند. این توصیف اصطلاحاً توصیف ویژگی (Feature Description) نامیده میشود. هنگامی که ویژگیها و توصیف آنها را در اختیار داشتید، میتوانید همان ویژگیها را در تمام تصاویر پیدا کرده و آنها را همتراز کنید، به هم بچسبانید یا هر کاری که میخواهید انجام دهید.
بنابراین در این ماژول، ما به بررسی الگوریتمهای مختلف در OpenCV برای یافتن ویژگیها، توصیف آنها، تطبیق آنها و غیره خواهیم پرداخت.