از برنامه نویسی در حوزه پردازش تصویر چقدر میدانید؟
شاید با دنیای پردازش تصویر آشنا باشید. اگر میخواهید ببینید پردازش تصویر در چند مرحله اتفاق میافتد و جالبتر این که چه راههایی برای برنامه نویسی در این حوزه وجود دارد، با این نوشته همراه شوید.
در این مقاله از بلاگ «پیشگامان لوتوس» میخواهیم ببینم دقیقا تصویر چیست و پردازش تصویر(Image Processing) چه مفهوم و شاخههایی دارد. و در پایان، چه گزینههایی برای برنامه نویسی در تصویرسازی پیش روی ماست.
تصویر چیست؟
اگر تعریف درستی از تصویر در ذهن داشته باشیم، درک مفهوم پردازش آن سادهتر میشود. تصویر رکوردی از طیف خاصی از سیگنالهای الکترومغناطیسیست که سنسوری در یک بازهی زمانی آن را ذخیره میکند. این طیف میتواند از هرگونه طول موجی باشد. برای مثال میتواند طول موج نور مرئی باشد که دوربینهای معمولی ضبط میکنند. یا طول موج ایکس که در تصویربرداری با اشعه ایکس ضبط میشود.
سنسورها با سرعت نمونهبرداری متفاوتی، دادهها را بهشکل دیجیتال ذخیرهسازی میکنند. هر نمونهبرداری میتواند یک پیکسل تشکیل دهد.
اکنون مفهوم تصویر دیجیتال روشنتر میشود. تصویر دیجیتال یا رقومی از مربعهای بسیار زیادی تشکیل شده که بهنام پیکسل (Pixel) معروفند. هر پیکسل مقداری دیجیتال دارد که بیانگر میزان روشنایی آن پیکسل است. به این دسته از تصویرها، تصویر رستری(Raster Image) هم میگوییم. هر تصویر رستری از چندین سطر و ستون تشکیل شده.
پردازش تصویر چیست؟
گفتیم که تصویر درواقع رکوردی از سیگنالهای الکترومغناطیسیست. پردازش آن هم نوع خاصی از پردازش سیگنال بهشمار میرود. اکنون میخواهیم بیشتر از آن حرف بزنیم.
اگر بخواهیم تعریف ساده و کوتاهی ارائه کنیم، میگوییم انجام فرایندهایی روی تصویر برای دریافت خروجی مشخصی از آن است. این تصویر میتواند عکس یا ویدیو باشد. این فرایندها چه کارهایی هستند؟
یکی از این فرایندها، بالا بردن دقت تصویر (Image Enhancement) است. فرایند دیگر، جدا کردن بخش مشخصی از تصویر (Image Segmentation) است.
برنامههایی مثل اینستاگرام یا کماسکنر، از الگوریتمهای مربوط به پردازش عکس بهره میبرند. اکنون ببینیم اجرای آن چه مرحلههایی دارد.
مرحلههای پردازش تصویر کدامند؟
مرحلهی اول:
در گام اول از ابزاری مثل دوربین، اسکنر نوری یا حسگر دیجیتالی، ورودی دریافت میشود. این ورودی همان تصویر است.
مرحلهی دوم:
تصویر ورودی دریافت شده و نوبت پیشپردازش آن رسیده. در این گام، نویزهای تصویر حذف میشوند. جداسازی قسمتهای مختلف تصویر اتفاق میافتد و جسمهای متفاوت از هم تشخیص داده میشوند.
مرحلهی سوم:
دشوارترین گام پردازش همینجاست. جایی که تجزیه و تحلیل تصویر اتفاق میفتد. این تجزیه و تحلیل کمک میکند اطلاعات جمعآوریشده، فشردهسازی شوند. کیفیت تصویر بهتر میشود. االگوها و الگوریتمهای آن هم مشخص میشوند. خروجی این مرحله، دادههای پیکسلی هستند که همهی بخشهای تصویر را دستهبندی کردهاند.
مرحلهی چهارم:
به ایستگاه آخر رسیدیم. اکنون نتیجهی بهدست آمده از تجزیه و تحلیل تصویر برای پردازش آن بهکار گرفته میشود.
شاخههای پردازش تصویر کدامند؟
میخواهیم کمی بیشتر بدانیم. پردازش عکس به دو شاخهی کلی تقسیم میشود و در راستای این دو بخش بهکار گرفته میشود.
شاخهی یک؛ بهبود تصویر
هدف ما از بهبود تصویر، واضح کردن بخشهای مبهم و بیکیفت تصویر، یا برجسته نشان دادن بخش خاصی از آن است. احتمالا نمونههای آن بهذهنتان میرسد؛ استفاده از فیلتر محوکننده، تغییر رنگ، ایجاد تضاد رنگی بین بخشهای مختلف تصویر و همسانسازی هیستوگرام برای بهتر شدن کنتراست.
شاخهی دو؛ بینایی ماشین
هوش مصنوعی، پردازش تصویر، سنسور و دوربینها به ماشین و ربات این توانایی را میدهند که جهان دوبعدی را در بعدهای بیشتری مدلسازی کنند. همچنین تصویرهای دنیای پیرامونشان را بررسی، تجزیه و تحلیل کنند. ماشین و ربات درصورت نیاز تصمیمگیری هم میکنند.
مثال میزنیم؛ چراغ راهنمایی و رانندگی، رباتهای مسیریاب و ماشینهایی که در کارخانه کارهایی مثل بستهبندی انجام میدهند.
برنامه نویسی در حوزهی پردازش تصویر چگونه است؟
میرسیم به بخش هیجانانگیز داستان، یعنی برنامه نویسی برای آن. دو راه پیش روی ماست.
راه اول؛ پایتون و کتابخانهی اوپن سیوی (Open CV)
پایتون زبان برنامه نویسی رایگان یا Open Source بهحساب میآید. اگر بخواهیم پایتون را خوب یاد بگیریم، منبعهای بسیاری دردسترس داریم. به کمک پایتون میتوانیم نمونههای اولیه را با سرعت نسبتا بالایی توسعه دهیم. ولی برای کاربردهای زمانبر، سرعت اجرا تقریبا پایین است. پس نمیتوانیم کارهای پیچیده را با آن اجرا کینم.
راه دوم؛ متلب
متلب برای گروههای تحقیقاتی و پروژههای دانشگاهی گزینهی بسیار مناسبیست. میتوانیم از کد متلب خروجی سی یا سی پلاس پلاس بگیریم.
بهترین ویژگی متلب، مستند (Documentation) کامل آن است. درواقع در بیشتر موارد، هر کد با نمونهی عملی عمراه میشود.
متلب نسبت به نرمافزارهای دیگر برتریهایی دارد:
- منابعی که برای آموزش پردازش تصویر در متلب استفاده شده، درجه یک انتخاب شدهاند.
- سرعت اجرای برنامهها در متلب بیشتر از پایتون است
- مستندهای متلب در مقایسه با پایتون و کتابخانهی اوپن سی وی بسیار کاملتر است.
- زبان متلب و پایتون خیلی به هم شبیه است. اگر پایتون را بلد باشیم، یادگرفتن متلب دیگر خیلی ساده میشود. حتی کدهای متلب و اوپن سی وی شبیه هستند.
چگونه پردازش تصویر را یاد بگیریم؟
برنامه نویسی برای پردازش تصویر چه مراحل و پیشنیازی دارد؟ پردازش تصویر زیرمجموعهی از پردازش سیگنال (Signal Processing) بهشمار میرود. حتما حدس میزنید که با سیگنالها سر و کار داریم. درواقع نخستین پیشنیاز یادگیری آن، داشتن پایهی قوی ریاضیست.
مهمترین مطلب ریاضی که در این حوزه بهکارمان میآید، بحث سری و تبدیل فوریه است. دانشجویان رشتههای مهندسی در درس ریاضیات مهندسی با آن آشنا میشوند. اگر این مطلب را یاد نگرفته باشیم، روبهرو شدن با انتگرالها برایمان عجیب و غریب بهنظر خواهد رسید.
از این بحث که بگذریم، به مهارت قابلقبولی در جبر خطی، بهویژه ماتریسها نیاز داریم. اگر در دبیرستان خوب درس خوانده باشیم، کارمان راه میافتد. با دانستن این پیشنیازها تقریبا آماده هستیم این دانش را یاد بگیریم.
برای فهمیدن تئوری آن دانش ریاضی لازم است. درواقع برنامه نویسی برای پردازش تصویر و هوش مصنوعی کار سختی بهحساب نمیآید. فهمیدن تئوری آن است که وقت و انرژی فراوان لازم دارد. اگر دانش اولیه را داشته باشیم، همین امروز میتوانیم آستینها را بالا بزنیم.