✅این همه بحث در مورد #تبدیل_فوریه و تجزیه سیگنال به فرکانسهای تشکیل دهنده
کاربردش چیه؟؟🤔
💢یکی از پر کاربردترین موارد استفاده آن، فرایند فیلتر در پردازش سیگنال است.
مثلا اگر صدا خش دار و بی کیفیت است یا تصویر وضوح خوبی ندارد با حذف برخی از #فرکانسها یا کاهش #نویز توسط #فیلتر به کیفیت مطلوب میرسونیم.
کاربردش چیه؟؟🤔
💢یکی از پر کاربردترین موارد استفاده آن، فرایند فیلتر در پردازش سیگنال است.
مثلا اگر صدا خش دار و بی کیفیت است یا تصویر وضوح خوبی ندارد با حذف برخی از #فرکانسها یا کاهش #نویز توسط #فیلتر به کیفیت مطلوب میرسونیم.
✅#انواع_فیلتر :
1)فیلتر پایین گذر: فرکانسهای بالاتر از یک مقدار معین را حذف میکند و فرکانسهای پایین تر را عبور میدهد.
2)میان گذر : فقط فرکانس های حد متوسط و میانی عبور داده میشود.
3) بالا گذر : فرکانسهای پایین تر از یک مقدار معین را حذف میکند و فرکانسهای بالا تر را عبور میدهد.
💢 واقعیت این است که قبل از پردازش اصلی ما یک پیش پردازش داریم تا سیگنالهای خارج از محدوده ی فرکانسی حذف شود. و این کار با فیلتر کردن انجام میشود.
1)فیلتر پایین گذر: فرکانسهای بالاتر از یک مقدار معین را حذف میکند و فرکانسهای پایین تر را عبور میدهد.
2)میان گذر : فقط فرکانس های حد متوسط و میانی عبور داده میشود.
3) بالا گذر : فرکانسهای پایین تر از یک مقدار معین را حذف میکند و فرکانسهای بالا تر را عبور میدهد.
💢 واقعیت این است که قبل از پردازش اصلی ما یک پیش پردازش داریم تا سیگنالهای خارج از محدوده ی فرکانسی حذف شود. و این کار با فیلتر کردن انجام میشود.
This media is not supported in your browser
VIEW IN TELEGRAM
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)و....
✅دقتdepth :تعداد بیتهای در نظر گرفته شده برای هر پیکسل در کامپیوتر
💢توجه کنید اگر ddepth مقدار -1 بگیرد یعنی نتیجه نوع داده تصویر خروجی برابر تصویر ورودی است مثل np.uint8 یعنی 8بیت 0-255(cv2.CV_8U )
💢💢الان تصویر ورودی من دارای اطلاعات زیر میباشد:
img = cv2.imread('face.png')
»> img.dtype
dtype('uint8')
در opencv ، با bgr هر پیکسل نماینده 3 پارامتر است: آبی، سبز و قرمز. هر کدام از این پارامتر ها مقدار 0-255 میگیرند. به طور مثال آبی مطلق :
b g r
255 0 0
💢توجه کنید اگر ddepth مقدار -1 بگیرد یعنی نتیجه نوع داده تصویر خروجی برابر تصویر ورودی است مثل np.uint8 یعنی 8بیت 0-255(cv2.CV_8U )
💢💢الان تصویر ورودی من دارای اطلاعات زیر میباشد:
img = cv2.imread('face.png')
»> img.dtype
dtype('uint8')
در opencv ، با bgr هر پیکسل نماینده 3 پارامتر است: آبی، سبز و قرمز. هر کدام از این پارامتر ها مقدار 0-255 میگیرند. به طور مثال آبی مطلق :
b g r
255 0 0
1)💥تفاوت تصاویر دیجیتال و آنالوگ
2)💥تصویر چیست؟
3)💥تصویر دیجیتال
4)💥پیکسل(pixel)
5)💥درموردCCD
6)💥در موردADC
🌐http://sufra.ir/2017/12/23/%D8%AA%D8%B5%D9%88%DB%8C%D8%B1-%D8%AF%DB%8C%D8%AC%DB%8C%D8%AA%D8%A7%D9%84-%D9%88-%D8%A2%D9%86%D8%A7%D9%84%D9%88%DA%AF/
2)💥تصویر چیست؟
3)💥تصویر دیجیتال
4)💥پیکسل(pixel)
5)💥درموردCCD
6)💥در موردADC
🌐http://sufra.ir/2017/12/23/%D8%AA%D8%B5%D9%88%DB%8C%D8%B1-%D8%AF%DB%8C%D8%AC%DB%8C%D8%AA%D8%A7%D9%84-%D9%88-%D8%A2%D9%86%D8%A7%D9%84%D9%88%DA%AF/
This media is not supported in your browser
VIEW IN TELEGRAM
1)💥نمایش تصویرRGB با Matplotlib
2)💥یک تصویر را با OpenCV می خوانیم وبا matplotlibنمایش میدهیم.
3)💥فقط از opencv برای خواندن و نمایش تصویر استفادهمیکنیم.
4)💥فقط از matplotlib برای خواندن و نمایش تصویر استفاده میکنیم
5)💥اپن سی وی تصاویر RGB را به عنوان آرایه های چند بعدی Numpy معرفی می کند … اما به ترتیب معکوس! به این معنی که تصاویر در واقع در BGR به جای RGB نشان داده شده است!
در ادامه:👇🏻👇🏻👇🏻👇🏻👇🏻
🌐http://sufra.ir/2018/01/12/%d9%be%d8%b1%d8%af%d8%a7%d8%b2%d8%b4-%d8%aa%d8%b5%d9%88%db%8c%d8%b1-%d8%a8%d8%a7-%d9%be%d8%a7%db%8c%d8%aa%d9%88%d9%86-%d9%82%d8%b3%d9%85%d8%aa-%d9%86%d9%87%d9%85/
2)💥یک تصویر را با OpenCV می خوانیم وبا matplotlibنمایش میدهیم.
3)💥فقط از opencv برای خواندن و نمایش تصویر استفادهمیکنیم.
4)💥فقط از matplotlib برای خواندن و نمایش تصویر استفاده میکنیم
5)💥اپن سی وی تصاویر RGB را به عنوان آرایه های چند بعدی Numpy معرفی می کند … اما به ترتیب معکوس! به این معنی که تصاویر در واقع در BGR به جای RGB نشان داده شده است!
در ادامه:👇🏻👇🏻👇🏻👇🏻👇🏻
🌐http://sufra.ir/2018/01/12/%d9%be%d8%b1%d8%af%d8%a7%d8%b2%d8%b4-%d8%aa%d8%b5%d9%88%db%8c%d8%b1-%d8%a8%d8%a7-%d9%be%d8%a7%db%8c%d8%aa%d9%88%d9%86-%d9%82%d8%b3%d9%85%d8%aa-%d9%86%d9%87%d9%85/