python_developer
Photo
💢 #Smoothing_Images
✅ اهداف این بخش:
◀️ مات کردن تصاویر با استفاده از فیلتر های پایین گذر مختلف
◀️ اعمال فیلتر های سفارشی به تصاویر (2D convolution)
✅ اهداف این بخش:
◀️ مات کردن تصاویر با استفاده از فیلتر های پایین گذر مختلف
◀️ اعمال فیلتر های سفارشی به تصاویر (2D convolution)
Image #Blurring (Image #Smoothing)#
#مات یا #نرم کردن تصویر با فیلتر #میانگین
فیلتری در حوزه #مکان و#پایین گذر
👀ببینیم کدبرنامه چی میگه:
1️⃣خواندن تصویر :
img = cv2.imread('face.png')
2️⃣یک آرایه5x5 که تمام عناصر آن از یک تشکیل شده باشه، توسط دستور زیر انجام میگیره:
#np.ones: آرایه ای از 1 درست میکند:
np.ones((5,5),np.float32)
array([[ 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.]], dtype=float32)
درواقع آین آرایه برای ساخت کرنل #فیلتر_میانه است که باید تقسیم بر 25 شود:
np.ones((5,5),np.float32)/25
array([[ 0.04, 0.04, 0.04, 0.04, 0.04],
[ 0.04, 0.04, 0.04, 0.04, 0.04],
[ 0.04, 0.04, 0.04, 0.04, 0.04],
[ 0.04, 0.04, 0.04, 0.04, 0.04],
[ 0.04, 0.04, 0.04, 0.04, 0.04]], dtype=float32)
چرا؟🤔🙄
3️⃣ در واقع هسته 5.5 روی عکس حرکت کرده و هر بار میانگین 25 پیکسل که شامل مرکز قسمتی از عکس که کرنل روی آن قرار دارد و باقی که همسایگان پیکسل مرکزی میباشند، حساب میشود. در واقع پیکسل های عکس، درایه به درایه در کرنل ضرب میشوند. سپس تمام این پیکسل ها جمع میشوند و جایگزین پیکسل مرکز ی میشوند. سپس مرکز کرنل روی پیکسل بعدی عکس منشیند.(کونولوشن).
کونولوشن هم در حوزه مکان و هم در حوزه فرکانس هست، منتها در حوزه فرکانس اسم آن به ضرب تبدیل میشود.
اپن سی وی(opencv) این کار را با تابع cv2.filter2D# انجام میدهد.
cv2.filter2D(img,-1,kernel)
همانطور که مشاهده میکنید این تابع 3 پارمتر دارد:
1)تصویر #مبدا یا اصلی
2)؟🤔
3) کرنل یا ماسک
در مورد پارامتر دوم :
cv.filter2D (src, dst, ddepth, kernel, anchor = new cv.Point(-1, -1), delta = 0, borderType = cv.BORDER_DEFAULT)
کل پارامترهایی که این تابع میگیره اینها هستن.
پارامتر ddepth# جواب سوال ما هست.
1) وsrc: تصویر ورودی
2) وdst : تصویر خروجی که از نظر اندازه و تعداد کانال با تصویر ورودی یکی است
3) وddepth: عمق دلخواه تصویر خروجی
4)کرنل
5)و....
#مات یا #نرم کردن تصویر با فیلتر #میانگین
فیلتری در حوزه #مکان و#پایین گذر
👀ببینیم کدبرنامه چی میگه:
1️⃣خواندن تصویر :
img = cv2.imread('face.png')
2️⃣یک آرایه5x5 که تمام عناصر آن از یک تشکیل شده باشه، توسط دستور زیر انجام میگیره:
#np.ones: آرایه ای از 1 درست میکند:
np.ones((5,5),np.float32)
array([[ 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.]], dtype=float32)
درواقع آین آرایه برای ساخت کرنل #فیلتر_میانه است که باید تقسیم بر 25 شود:
np.ones((5,5),np.float32)/25
array([[ 0.04, 0.04, 0.04, 0.04, 0.04],
[ 0.04, 0.04, 0.04, 0.04, 0.04],
[ 0.04, 0.04, 0.04, 0.04, 0.04],
[ 0.04, 0.04, 0.04, 0.04, 0.04],
[ 0.04, 0.04, 0.04, 0.04, 0.04]], dtype=float32)
چرا؟🤔🙄
3️⃣ در واقع هسته 5.5 روی عکس حرکت کرده و هر بار میانگین 25 پیکسل که شامل مرکز قسمتی از عکس که کرنل روی آن قرار دارد و باقی که همسایگان پیکسل مرکزی میباشند، حساب میشود. در واقع پیکسل های عکس، درایه به درایه در کرنل ضرب میشوند. سپس تمام این پیکسل ها جمع میشوند و جایگزین پیکسل مرکز ی میشوند. سپس مرکز کرنل روی پیکسل بعدی عکس منشیند.(کونولوشن).
کونولوشن هم در حوزه مکان و هم در حوزه فرکانس هست، منتها در حوزه فرکانس اسم آن به ضرب تبدیل میشود.
اپن سی وی(opencv) این کار را با تابع cv2.filter2D# انجام میدهد.
cv2.filter2D(img,-1,kernel)
همانطور که مشاهده میکنید این تابع 3 پارمتر دارد:
1)تصویر #مبدا یا اصلی
2)؟🤔
3) کرنل یا ماسک
در مورد پارامتر دوم :
cv.filter2D (src, dst, ddepth, kernel, anchor = new cv.Point(-1, -1), delta = 0, borderType = cv.BORDER_DEFAULT)
کل پارامترهایی که این تابع میگیره اینها هستن.
پارامتر ddepth# جواب سوال ما هست.
1) وsrc: تصویر ورودی
2) وdst : تصویر خروجی که از نظر اندازه و تعداد کانال با تصویر ورودی یکی است
3) وddepth: عمق دلخواه تصویر خروجی
4)کرنل
5)و....