python_developer
1.54K subscribers
3.74K photos
1.97K videos
232 files
434 links
کانال اموزش پایتون @Real_developer
تبلیغات پذیرفته میشود.
Download Telegram
#فرکانس یا بسامد: تعداد تکرار یک رویداد در واحد زمان.
بر اساس اینکه کدامیک از این سه نوع فرکانس باید حذف شود، سه نوع #فیلتر داریم.
#انواع_فیلتر :
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 باشد یعنی عمق تصویر خروجی باید مانند تصویر ورودی باشد.تصویر ورودی میتونه هر تعداد کانال داشته باشه که به صورت جداگانه پردازش شوند ولی عمق باید CV_8U, CV_16U, CV_16S, CV_32or CV_64باشد
دقت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
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/
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/
💫عملیات اساسی و پایه بر روی تصاویر
1)💥دسترسی به مقادیر پیکسل و تغییر آنها
2)💥دسترسی به مشخصات تصویر
3)💥تنظیم قسمت مورد نظر در تصویر ((ROI)Region of Interes)


Image ROI

گاهی اوقات، باید با یک منطقه خاص از تصاویر بازی کنید..
برای تشخیص چشم در تصاویر، اول تشخیص چهره در سراسر تصویر انجام می شود و هنگامی که چهره به دست آمد، ما تنها یک منطقه چهره را انتخاب می کنیم و به دنبال آن چشم ها را در داخل آن را جستجو می کنیم.این دقت را بهبود (چون چشمان همیشه روی چهره ها هستند) و عملکرد (به دلیل اینکه ما برای یک منطقه کوچک جستجو می کنیم) را افزایش میدهد.

4)💥تقسیم و ادغام تصاویر
5)💥 ساخت مرز و حاشیه برای تصاویر
6) 💥 تبدیل هندسی تصاویر
7) 💥 نوشتن یک متن، رسم چند ضلعی، دایره ، مستطیل و یک خط
در ادامه:👇🏻👇🏻👇🏻👇🏻👇🏻
🌐http://sufra.ir/2018/01/13/%D8%B9%D9%85%D9%84%DB%8C%D8%A7%D8%AA-%D8%A7%D8%B3%D8%A7%D8%B3%DB%8C-%D9%88-%D9%BE%D8%A7%DB%8C%D9%87-%D8%A8%D8%B1-%D8%B1%D9%88%DB%8C-%D8%AA%D8%B5%D8%A7%D9%88%DB%8C%D8%B1/
💢2D Convolution ( Image Filtering )
فیلتر کردن تصاویر در حوزه فرکانس و مکان
💠برای روشن شدن این تفاوت در دو حوزه از عملگر کانولوشن استفاده میشود.

◀️ماسک یا هسته برای تار شدن، تیز کردن، منبت کردن، تشخیص لبه و غیره استفاده می شود. این کار با انجام یک کانولوشن بین یک هسته و یک تصویر انجام می شود.

◀️همانند سیگنالهای یک بعدی، تصاویر نیز می توانند با فیلترهای پایین گذر (LPF)، فیلترهای بالاگذر(HPF) و غیره فیلتر شوند. یک LPF در از بین بردن نویز و یا تار شدن تصویر کمک میکند. فیلتر HPF در پیدا کردن لبه ها در یک تصویرکمک می کند .OpenCV تابع، cv2.filter2D () را برای کونولوشن یک هسته با یک تصویر فراهم می کند.
◀️به عنوان مثال، یک فیلتر نرمال برای حذف نویز که پایین گذر هست ، هم در حوزه فرکانس و هم در حوزه مکان انجام میشود.
◀️کانولوشن در حوزه مکان همین نام را دارد ولی در حوزه فرکانس به ضرب تبدیل میشود.
تاری تصویر که توسط convolving تصویر با یک هسته فیلتر پایین گذر به دست می آید. برای حذف نویز مناسب است،
برای یافتن هسته مورد نظر و کاربرد آن به سایت زیر مراجعه کنید:
https://en.wikipedia.org/wiki/Kernel_(image_processing)
اپن سی وی عمدتا چهار نوع تکنیک های مات کردن را فراهم می کند:

1) Averaging
فیلتر نرمال یا میانگین توسط دو تابع cv2.blur() یا cv2.boxFilter() که بررسی میشود . 👇👇👇
import cv2
import numpy as np
from matplotlib import pyplot as plt

img = cv2.imread('kh.jpg')

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()
Averaging