بیشتر شما بازی های پازل را انجام داده اید. شما شمارِ زیادی قطعه کوچک از تصویر ها را دارید و برای ساخت یک تصویر واقعی بزرگ، باید آنها را به درستی در کتر یکدیگر بچینید. پرسش این است که شما چگونه این کار انجام می دهید؟ و پرسش دیگر اینکه، چگونه همین تئوری را برای کامپیوتر می توان طرح زیزی کرد تا کامپیوتر بتواند پازل بازی کند.

پرسش دیگر این است که، اگر رایانه می تواند پازل را بازی کند، چرا نمی توانیم بسیاری از تصاویر واقعی را از یک منظره طبیعی به رایانه بدهیم و به او بگوییم که همه این تصاویر را به یک تصویر بزرگ بزرگ تبیدل کن؟ اگر رایانه می تواند چندین تصویر طبیعی را به یک تصویر بزرگ در بیاورد، چگونه می شود تصاویر زیادی از یک ساختمان یا هر سازه را تهیه کرد و به رایانه گفت که یک مدل سه بعدی از آن ایجاد کند؟

خوب، پرسش ها و تصویر سازی ها از ایده ها همین گونه می تواند ادامه داشته باشد ولی همه اینها به پایه ای ترین پرسش بستگی دارد؟ چگونه بازی های پازل را انجام دهیم؟ چگونه می توان شمار زیادی از تصاویر تقسیم شده را در یک تصویر بزرگ بزرگ مرتب کرد؟ چگونه می توان شماری از تصاویر طبیعی را به یک تصویر واحد تبدیل کنیم؟

پاسخ این است که ما به دنبال الگوهای ویژه یا ویژگی های ویژه و یکتایی هستیم که به سادگی ردیابی شوند و به سادگی قابل مقایسه باشند. یک کاربرد در پردازش تصویر، شناسایی کالا ها در فروشگاه ها باشد. برای نمونه می خواهیم سیب ها را از پرتقال ها بشناسیم. برای پیاده سازی چنین پروژه ای تنها پردازش لبه ها (Edge) بَس نیست و نیاز به داشتن برخی دیگر از ویژگی ها نیز نیاز است. اگر بخواهیم از دید یک انسان پردازش تصویر را برای شناسایی و پردازش ببینیم، انسان از ویژگی های گوناگونی مانند رنگ، نوشته و شکل دیگر ویژگی ها کمک می گیرد تا بتواند شی را از دیگری تمایز دهد.

پاسخ این است که ما به دنبال الگوهای ویژه یا ویژگی های ویژه و یکتایی هستیم که به سادگی ردیابی شوند و به سادگی قابل مقایسه باشند. یک کاربرد در پردازش تصویر، شناسایی کالا ها در فروشگاه ها باشد. برای نمونه می خواهیم سیب ها را از پرتقال ها بشناسیم. برای پیاده سازی چنین پروژه ای تنها پردازش لبه ها (Edge) بَس نیست و نیاز به داشتن برخی دیگر از ویژگی ها نیز نیاز است. اگر بخواهیم از دید یک انسان پردازش تصویر را برای شناسایی و پردازش ببینیم، انسان از ویژگی های گوناگونی مانند رنگ، نوشته و شکل دیگر ویژگی ها کمک می گیرد تا بتواند شی را از دیگری تمایز دهد.

درک شکل زیر برای ما بسیار ساده است ولی برای ماشین اینگونه نیست. البته این سادگی که برای ما هست، باید گفت که مغر ما از پیش و به کمک شبکه های نورونی، محیط پیرامون را یادگرفته و از این رو با ورود یک تصویر تازه از چشم، می تواند از میان آن همه تصویر از پیش یادگرفته، تصویر تازه را تطابق دهد.

A و B سطوح مسطح هستند و در بسیاری از مناطق پخش می شوند. یافتن محل دقیق این تکه ها دشوار است. C و D بسیار ساده تر هستند. آنها لبه های ساختمان هستند. می توانید یک مکان تقریبی پیدا کنید ، اما مکان دقیق هنوز دشوار است. دلیلش این است که ، در امتداد لبه ، همه جا یکسان است. بنابراین لبه (Edge) در برابر با ناحیه مسطح، ویژگی های بسیار بهتری هستند ولی همچنان بَسَنده نیستند.

سرانجام ، E و F برخی گوشه های ساختمان هستند. و آنها را می توان به راحتی پیدا کرد. زیرا در گوشه ها، هر کجا این تکه های کوچک تصویر E و F را جابجا کنید ، متفاوت به نظر می رسند. بنابراین می توان آنها یا بهتر است بگوییم گوشه ها (Corner) را به عنوان یک ویژگی خوب در نظر بگیریم.

در تصویر زیر می توانیم درک بهتری از سطوح تخت (مسطح یا Flat)، لبه ها و گوشه ها داشته باشیم. تکه آبی رنگ همان ناحیه های تخت هستند و همانگونه که می بینید این پیدا کردن یک تطابق برای یک تکه تخت در تصویر بسیار سخت است برای اینکه ناحیه های تخت بسیاری در تصویر هست. تکه سیاه رنگ همان لبه ها هستند که از دید بودن یک ویژگی، لبه ها بهتر از ناحیه های تخت هستند. در پایان، تکه های قرمز رنگ گوشه ها را نشان می دهند. نکته که باید به یاد داشته باشید، آن است که لبه ها در یک راستا (جهت یا Direction) ولی گوشه ها در دو راستا هستند.

برخی کاربردهای پردازش تصویر با دانستن ویزگی ها

  • می خواهیم در پردازش تصویر، دو تصویر را با یکدیگر بسنجیم و می خواهیم ببینیم که آیا این دو تصویر با یکدیگر تطابق دارند یا نه؟ با گمان کردن داشتن یک معیار تطابق، زمانی می گوییم دو تصویر با یکدیگر تطابق دارند که مقدار معیار تطبیق ما بیشتر از یک آستانه (Threshold) باشد.
  • در ایده دیگر، گمان کنید که یک پایگاه داده بزرگ از تصویرها را داریم و می خواهیم با کاربردی همانند تطبیق را پیاده سازی کنیم ولی به جای این که همه چیز را برای هر تصویر دوباره پردازش (Recomputing) کنیم، می توانیم تصویرهای کوچکتر و به سادگی قابل جستجو شدن را نگهداری کنیم. اکنون با داشتن تصویری تازه، می توانیم ویژگی های آن را استخراج کنیم و سپس این ویژگی ها را با تصویرهای از پیش آماده شده در پایگاه داده، تطابق دهیم.
  • همچنین ،در کاربردی برای پیدا کردن یک شی (Object)، ما یک تصویر کوچک از یک جسم یا شی یا منطقه (Region) به نام الگو (Template) داریم. انگیزه (هدف) این است که بررسی کنیم آیا یک تصویر از این الگوی برخوردار است یا خیر. این کاربرد در بگیرنده آن است که نقطه های کلیدی از الگو را با تصویر تازه تطابق دهیم. اگر مقدار تطابق بیشتر از یک آستانه باشد، پس می توانیم بگوییم که تصویر تازه دارای ناحیه ای همانند الگو است.

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

تشخیص ویژگی چیست

در بینایی ماشین و پردازش تصویر، تشخیص ویژگی (Feature Detection) شیوه هایی برای تصمیم گیری های محلی بر روی نقطه های (Points) تصویر است تا مشخص شود که آیا در آن نقطه یکی از ویژگی ها هست یا نه؟ در شکل زیر (از سایت ویکی پدیا) جدولی از برخی ویژگی ها فهرست شده اند. برای نمونه، الگوریتم های Sobel و Canny که پیش از این گفته شده اند، برای پیدا کردن لبه های (Edge) تصویر به کار می روند و در برابر آنها، الگوریتم Harris برای پیدا کردن گوشه ها (Corner) به کار می روند.

تشخیص لبه ها بوسیله OpenCV و پایتون

تشخیص لبه ها در OpenCV با الگوریتم Canny

سیستم بینایی رایانه ای باید چندین ویژگی را یاد بگیرد که این ویژگی ها یک شیء را توصیف می کنندُ به گونه ای که تشخیص آن از شی های دیگر بسیار آسان باشد. همانگونه که پیش از این گفتیم، تشخیص ویژگی ها (Feature Detection) در کاربردهایی مانند تطابق دو تصویر و تشخیص اشیا کاربرد دارند. یکی از نخستین ویژگی هایی که می توانیم به آن فکر کنیم، پیکسل ها هستند. به منظور ایجاد یک ابزار مقایسه دو تصویر، ما به طور متوسط از فاصله مربعات (Squared Distance) میان مقدارهای پیکسل در دو تصویر استفاده می کنیم. با این حال ، اینها نیز قوی نیستند، زیرا به ندرت دو تصویر را می بینید که دقیقاً یکسان هستند. 

همواره یک دوربین (مانند دستگاه های همراه یا دوربین ربات)در حال حرکت است و از این رو تغییرهایی میان تصویرهای (فریم های) گرفته شده پدید می آید. در این حالت و با بودن در یک محیط، حتی با اینکه مقدار پیکسل های فریم ها بسیار نزدیک به هم هستند ولی در نظر بگیرید که محاسبه فاصله (تفاوت) میان آنها چه شماره بزرگی خواهد بود آنهم به شیوه بلادرنگ و تغییرات آنی در فریم دوربین.

یادآوری لبه

لبه ها نقاطه هایی هستند، جایی که یک مرز (Boundary) (یا یک لبه) میان دو ناحیه تصویر هست. طور کلی، یک لبه می تواند تقریباً از شکل دلخواه و یا ممکن است شامل تقاطع ها باشد. در عمل، لبه ها معمولاً به عنوان مجموعه ای از نقاط در تصویر تعریف می شوند که از شدت گرادیان (Gradient) قوی برخوردار هستند. در نوشته های پیش رو درباره الگوریتم های گوناگون برای تشخیص لبه ها گفته شده است. به یاد داشته باشید الگوریتم هایی همانند Sobel, Canny یا Harris همگی Feature Detector هستند.