Mathematical Morphology
دو عملیات اصلی در Mathematical Morphology وجود دارد :
- Dilation ( انشعاب )
- Erosion ( فرسایش – تحلیل )
همچنین یک سری عملیات ترکیبی نیز وجود دارد :
- Opening and Closing
- Thinning and Tickening
- و ..
Dilation
عمل Dilation تصویر باینری را بسط میدهد (Expand) ، و همینطور علاوه بر گسترش دادن تصویر ، حفره های موجود در آن را از بین می برد و لبه های خراب را ترمیم می کند.
Erosion
عکس عملیات Dilation می باشد .
که تصویر باینری را تحلیل میدهد ، و در واقع تصویر را کوچک میکند و قسمت های اضافی را حذف می کند . ( Shrink )
برای انجام این عملیات به المان هایی از جمله شکلی به عنوان فیلتر نیاز داریم که دارای ناحیه ای است که به آن Origin می گوییم .
نمونه هایی از این فیلتر ها :
انجام عملیات Dilation
ورودی این عملیات تصویر باینری B و فیلتر S هستند.
انجام این عملیات از طریق حرکت فیلتر S روی تصویر باینری و قرار دادن origin روی هر پیکسل میباشد . با قرار گرفتن origin در یک پیکسل از تصویر باینری و ضرب تک تک المان های فیلتر در پیکسل های نظیرشان و در نهایت با عمل OR ، پیکسل متناظر با origin ساخته می شود .
مثال متن باینری
برای مثال براثر عمل Dilation روی متن باینری مقابل :
با استفاده از فیلتر
تصویر حاصل بر اثر پر کردن حفره ها و نقاط خالی نوشته ، به این شکل در خواهد آمد :
مثال : بر اثر فرایند Dilation نتیجه عملیات به چه شکل خواهد بود ؟
انجام عملیات Erosion :
ورودی این عملیات تصویر باینری B و فیلتر S هستند.
انجام این عملیات از طریق حرکت فیلتر S روی تصویر باینری و قرار دادن origin روی هر پیکسل میباشد . با قرار گرفتن origin در یک پیکسل از تصویر باینری و ضرب تک تک المان های فیلتر در پیکسل های نظیرشان و در نهایت با عمل AND ، پیکسل متناظر با origin ساخته می شود .
لازم به ذکر است سایز های مختلف فیلتر باعث ایجاد نتایج مختلفی در تصویر حاصل می شوند ، برای مثال اگر شکلی مطابق تصویر زیر داشته باشیم ، بر اثر استفاده از دیسک هایی با مقادیر شعاعی مختلف نتایج متفاوتی خواهیم داشت :
عملیات های Opening و Closing
این دو عملیات از مهم ترین فرایندها روی تصاویر باینری هستند.
Opening : عملیات حاصل از یک Erosion و سپس Dilation .
نمونه هایی از عملیات Opening
مثال ۱ :
مثال ۲ :
اگر با استفاده از فیلترِ دیسک ۱۱ پیکسلی عملیات opening را روی تصویر اولیه داشته باشیم ، در تصویر وسط روی عکس اولیه Threshold زده شده و سپس با انجام عملیات Opening میبینیم تصویر سمت راست نتیجه می شود که بدون کوچک شدن سایز تصویر نویز ها حذف شده اند ( ابتدا Erosion برای حذف نویز ها و سپس Dilation برای برگرداندن تصویر به سایز اولیه ) .
Closing : عملیات حاصل از یک Dilation و سپس Closing .
نمونه هایی از عملیات Closing
مثال ۱ :
مثال ۲ :
همینطور در تصویر بالا میبینیم در تصویر وسطی روی عکس اولیه Threshold زده شده و سپس در تصویر نهایی (سمت راست) نتیجه ی عملیات Closing را میبینیم که بدون بزرگ شدن سایز تصویر حفره ها پر شدند ( ابتدا Dilation برای پر کردن حفره ها و سپس Erosion برای برگرداندن تصویر به سایز اولیه ) .
نمونه هایی از عملیات Opening – Closing
همانطور که میبینیم با عملیات opening بدون کوچک شدن تصویر نویز ها حذف شده ، و سپس روی تصویر حاصل عملیات closing صورت گرفته و بدون بزرگ شدن تصویر حفره ها پر شده اند.
بررسی Opening-Closing و عملیات های Dilationو Erosion در OpenCv
برای انجام فرایند های Erosion و Dilation و Opening و Closing در OpenCv میتوانیم به این شکل عمل کنیم :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 |
import cv2 import numpy as np image = cv2.imread('images/opencv_inv.png', 0) cv2.imshow('Original', image) cv2.waitKey(0) # Let's define our kernel size kernel = np.ones((5,5), np.uint8) # Now we erode erosion = cv2.erode(image, kernel, iterations = 1) cv2.imshow('Erosion', erosion) cv2.waitKey(0) # dilation = cv2.dilate(image, kernel, iterations = 1) cv2.imshow('Dilation', dilation) cv2.waitKey(0) # Opening - Good for removing noise opening = cv2.morphologyEx(image, cv2.MORPH_OPEN, kernel) cv2.imshow('Opening', opening) cv2.waitKey(0) # Closing - Good for removing noise closing = cv2.morphologyEx(image, cv2.MORPH_CLOSE, kernel) cv2.imshow('Closing', closing) cv2.waitKey(0) cv2.destroyAllWindows() |
با انجام این عملیات ها بر روی عکس مقابل :
نتایج بدین شکل خواهند بود :
Erosion :
Dilation :
Opening :
Closing :
شبکه های اجتماعی