مات کردن تصویر با OpenCV و پایتون

مات کردن (Blurring) تکنیکی در پردازش تصویر است که هم به عنوان یک فیلتر تنها برای اعمال افکت روی تصویر استفاده شود و هم به عنوان یک ابزار پیش پردازش قبل از روش های دیگر به کار می رود. به عنوان مثال بسیاری از روش های تشخیص لبه (Edge Detection) یکبار تصویر را مات می کنند و سپس آن را پردازش می کنند

فیلتر تصویر و مفهوم کرنل در پردازش تصویر

پردازش تصویر – مقدمه ای بر فیلترها

در OpenCV تابعی به نام ()blur وجود دارد که دو وردی را دریافت می کند. ورودی نخست نام متغیری است که به ماتریس تصویر اشاره می کند. آرگومان دوم آن ابعاد (سطر و ستون) کرنلی را تعیین می کنند که می خواهیم بر روی تصویر اصلی اعمال شود. در واقع این تابع ساده ترین نوع مات سازی تصویر، یعنی Normalized Box Filter یا Box Blur را پیاده سازی می کند. شکل زیر کرنل این فیلتر (یعنی Normalized Box Filter) را نشان می دهد.

که هر پیکسل در تصویر نهایی (تصویر مات – تار شده) دارای مقداری برابر با مقدار میانگین (Average) پیکسل های همسایه آن در تصویر ورودی است. اگر فرض کنیم ابعاد ماتریس، یعنی سطر و ستون ها به صورت 3x3 باشند، پس نتیجه می گیریم که ماتریس دارای ۹ درایه و هر درایه بر عدد ۹ تقسیم می شود که شکل ماتریس آن در زیر نشان داده شده است.


در کدهای بالا و تصویرهای خروجی آن، ابتدا تصویر را به فضای Grayscale تبدیل کرده ایم و سپس تصویرهای مات شده را برای تصویر خاکستری و تصویر اصلی ایجاد کرده ایم. توجه کنید هر چه ابعاد کرنل آرگومان دوم بیشتر باشد، مات شدگی نیز بیشتر می شود. شکل های زیر به ترتیب تصویر اصلی، خاکستری مات شده و تصویر اصلی مات شده را نشان می دهند.

فلیتر GuassianBlur

فیلتر گوسی، احتمالا پراستفاده ترین (و نه لزوما سریعترین) فیلتر، فیلتر گوسی میباشد. فیلتر گوسی با استفاده از عمل کانولوشن بین هر پیکسل از ورودی و کرنل فیلتر گوسی و جمع همه آنها بدست می‌آید. در OpenCV از متد ()guassianBlur برای پیاده سازی این فیلتر استفاده می شود. آرگومان نخست نام متغیری است که به ماتریس اصلی اشاره می کند. آرگومان دوم نیز ابعاد کرنل را تعیین می کند ولی توجه کنید که ابعاد ماتریس حتما باید عددی فرد باشند.

cv2.error: OpenCV(3.4.3) /tmp/opencv-20181208-18931-20c5q2/opencv-3.4.3/modules/imgproc/src/smooth.cpp:3820: error: (-215:Assertion failed) ksize.width > 0 && ksize.width % 2 == 1 && ksize.height > 0 && ksize.height % 2 == 1 in function ‘createGaussianKernels

فیلتر میانه Median Filter

فیلتر میانه بر روی هر پیکسل تصویر عمل کرده و آن را با مقدار میانگین پیکسل های همسایه تعویض می کند. در OpenCV از متد ()medianBlur برای پیاده سازی این فلیتر استفاده می شود. آرگومان اول آن نام ماتریسی است که به تصویر اصلی اشاره دارد و آرگومان دوم ابعاد کرنل را مشخص می کند که باید عددهای فرد باشند.

فیلتر دو طرفه Bilateral Filter

فیلتر مات شدن دو طرفه یکی از پیشرفته ترین فیلترها برای صاف کردن تصویر (هموار کردن – Smoothing) و کاهش نویز (Noise) است. دو فیلتر دیگر (Median Blur و Guassian Blur) لبه ها (Edges) را در حین برداشتن نویزها از بین می برند. اما این فیلتر می تواند نویزهای تصویر را کاهش دهد به طوری که لبه ها نیز حفظ و نگهداری می شوند. به عبارت دیگر لبه ها از بین نمی روند.

کد کامل برنامه

دانلود سورس برنامه های این مطلب Bluring with opencv