: الطي ثنائي البعد - ترشيح الصور¶
كما في الاشارات وحيدة البعد يمكن ايضاً فلترة الصور باستخدام مرشحات
LPF , HPF
الاول يساعد في ازالة الضجيج وتغبيش الصورة والثاني يساعد بايجاد الحواف بالصورة وبالمكتبة هنا لدينا التابع
cv2.filter2D()
لطي قناع مع صورة , وكمثال سنجرب هنا مرشح معدل على صورة , , مرشح توسيطي قد يعرف كالتالي
K=1/25*| 1 1 1 1 1 |
| 1 1 1 1 1 |
| 1 1 1 1 1 |
| 1 1 1 1 1 |
| 1 1 1 1 1 |
وهذا يكافئ حساب المتوسط لمجموعة البكسلات الواقعة ضمن القناع
جرب الكود التالي وقارن النتيجة
import cv2
import numpy as np
from matplotlib import pyplot as plt
img = cv2.imread('opencv_ios.png')
kernel = np.ones((5,5),np.float32)/25
dst = cv2.filter2D(img,-1,kernel)
plt.subplot(121),plt.imshow(img),plt.title('Original')
plt.xticks([]), plt.yticks([])
plt.subplot(122),plt.imshow(dst),plt.title('Averaging')
plt.xticks([]), plt.yticks([])
plt.show()
:تنعيم الصورة¶
وتستخدم لازالة الضجيج , تحديدا التردادات المرتفعة , وتجعل الحواف اخف , ولكن هناك انواع لا تفعل , عموما المكتبة
OpenCV
تقدم 4 تقنيات اساسية , للتغبيش كالتالي
: التوسيط¶
وهذا يطبق تابع الصندوق على الصورة , وهذا يتم من خلال التوابع
cv2.blur() , cv2.boxFilter()
ويجب تحديد الطول والعرض للقناع المعدل
: ملاحظة¶
اذا لم ترد استخدام قناع معدل , يمكنك استخدام التابع الثاني من اعلاه وتمرير
normalized = False
الق نظرة , على البرنامج التالي ذو القناع 5,5
# for the above image
blur = cv2.blur(img,(5,5))
plt.subplot(121),plt.imshow(img),plt.title('Original')
plt.xticks([]), plt.yticks([])
plt.subplot(122),plt.imshow(blur),plt.title('Blurred')
plt.xticks([]), plt.yticks([])
plt.show()
: الترشيح الغاوسي¶
والان بدلا من قناع صندوق ذو عوامل متساوية سنستخدم مرشح غاوسي , وهذا يتم عبر التابع ,
cv2.GaussianBlur()
ويتم ادخال حجم القناع كاعداد مفردة , كذلك الانحراف المعياري على المحورين , وفي حال كان احداهما فقط معطى يكون الثاني مساوياً له , واذا اعطيا القيمة صفرا , يحسبان من حجم القناع , وهذا المرشح مفيد جدا بازالة الضجيج الغاوسي من الصورة واذا اردت يمكنك انشاء القناع الغاوسي بوساطة
cv2.getGaussianKernel()
وبتحوير سطر واحد بالكود السابق
# for the above image
blur = cv2.GaussianBlur(img,(5,5),0)
plt.subplot(121),plt.imshow(img),plt.title('Original')
plt.xticks([]), plt.yticks([])
plt.subplot(122),plt.imshow(blur),plt.title('Blurred')
plt.xticks([]), plt.yticks([])
plt.show()
: الترشيح الاوسطي¶
وهنا يحسب التابع , العنصر الاوسط بالقيمة لمجموعة البكسلات تحت القنالع ويستبدله بالعنصر المركزي
cv2.medianBlur()
وهذا الترشيح فعال جدا بحالة ضجيج الملح والفلفل , واحدى الملاحظات المثيرة ان المرشحات السابقة دائما ما تستبدل العنصر بقيمة قد لاتكون اصلا في الصورة , على عكس الترشيح الاوسطي , مما يقلص الضجيج بفعالية ,
قياس القناع يجب ان يكون عددا مفردا . وبهذا المثال اخذنا , صورة بضجيج و طبقنا المرشح الاوسطي عليها
img = cv2.imread('noisy1.bmp')
median = cv2.medianBlur(img,5)
plt.imshow(img),plt.title('Original')
plt.xticks([]), plt.yticks([])
plt.show()
plt.imshow(median),plt.title('Blurred')
plt.xticks([]), plt.yticks([])
plt.show()
: Bilateral الترشيح¶
كما لاحظنا تميل المرشحات السابقة لتغبيش الحواف , ولكن هذا لايتم بحالة هذا المرشح , وهذا هو غرضه الاساسي , بحيث يزيل الضجيج دون الاضرار بالحواف
cv2.bilateralFilter()
فالمرشح الغاوسي لا يهتم بان البكسلات تحت القناع ذات شدات متقاربة ام لا , مما يغبش الحواف
وهذا المرشح ياخذ قناعا غاوسياً ايضاً ولكن مع مضروب اضافي تابع للفرق بشدات البكسلات , وهو بذلك يحتسب كل من الجوار المكاني والجوار في الشدات , وبذلك يحافظ على الحواف ,
: والكود ادناه يوضح استخدامه
dst = cv2.imread('PICT0173.jpg')
# change 4 matplotlib
img1 = np.zeros(dst.shape,np.uint8)
img1[:,:,0] = dst[:,:,2]
img1[:,:,1] = dst[:,:,1]
img1[:,:,2] = dst[:,:,0]
blur = cv2.bilateralFilter(img1,9,75,75)
plt.imshow(img1),plt.title('Original')
plt.xticks([]), plt.yticks([])
plt.show()
plt.imshow(blur),plt.title('Blurred')
plt.xticks([]), plt.yticks([])
plt.show()
ليست هناك تعليقات:
إرسال تعليق