python_developer
1.54K subscribers
3.74K photos
1.97K videos
232 files
434 links
کانال اموزش پایتون @Real_developer
تبلیغات پذیرفته میشود.
Download Telegram
تغییر زیاد در gradient ، نشان دهنده یک تغییر عمده در تصویر است. اندازه گیری این تغییرات توسط مشتق صورت میگیرد.
💢💢💢💢💢💢💢
برای ادامه من فکرمیکنم یک تعریفی از مشتق بر روی توابع معمولی داشته باشیم بدنباشه:
مشتق:
مشتق ایدهٔ اصلی حساب دیفرانسیل، بخش اول آنالیز ریاضی است که نرخ لحظه‌ای (یا نقطه‌ای) تغییرات تابع را نشان می‌دهد. مشتق نیز، نظیر انتگرال، از مسئله‌ای در هندسه، یعنی یافتن خط مماس در یک نقطه از منحنی ناشی شده‌است.ویکی
💢💢💢💢💢💢
This media is not supported in your browser
VIEW IN TELEGRAM
در هر نقطه، مشتق شیب خط مماس است. در نقاطی که خط سبز است؛ مشتق مثبت، در نقاطی که خط سیاه است؛ مشتق صفر و در نقاطی که خط قرمز است؛ مشتق منفی است.ویکی
کتابخانهOpenCV دارای سه نوع از فیلترهای شیب دار یا فیلترهای high-pass سوبل، شارر و لاپلاسین است.
💢💢💢💢💢💢
💢1. Sobel and Scharr Derivatives💢
میدانیم تصویر یک سیگنال دو بعدی است.
در راستای x,y.
اگر بخواهیم لبه را در راستای x یا y بدست آوریم، از این فیلتر استفاده میکنیم.

💢💢💢💢💢
اگر I تصویر ما باشد، دو مشتق را محاسبه می کنیم:
تغییرات افقی:
تصویر I، توسط convolving با هسته Gx و سایز فرد، محاسبه میشود.

💢💢💢💢
‍ تغییرات عمودی:
تصویر I، توسط convolving با هسته Gy و سایز فرد، محاسبه میشود.

💢💢💢💢💢
cv2.Sobel(src, ddepth, dx, dy[, dst[, ksize[, scale[, delta[, borderType]]]]]) → dst
اگر ksize را -1 قرار دهیم، به آن فیلتر #شار 3x3 گویند که از فیلتر #سوبل 3x3 نتیجه بهتری دارد.
💢💢💢💢💢
import cv2
import numpy as np
from matplotlib import pyplot as plt

img = cv2.imread('blackandwhite.jpg',0)


sobelx = cv2.Sobel(img,cv2.CV_64F,1,0,ksize=5)
sobely = cv2.Sobel(img,cv2.CV_64F,0,1,ksize=5)

plt.subplot(2,2,1),plt.imshow(img,cmap = 'gray')
plt.title('Original'), plt.xticks([]), plt.yticks([])
plt.subplot(2,2,3),plt.imshow(sobelx,cmap = 'gray')
plt.title('Sobel X'), plt.xticks([]), plt.yticks([])
plt.subplot(2,2,4),plt.imshow(sobely,cmap = 'gray')
plt.title('Sobel Y'), plt.xticks([]), plt.yticks([])
plt.show()

💢💢
💢2. Laplacian Derivatives💢
فیلتر لاپلاسین، از رابطه زیر استفاده میکند:
جایی که هر مشتق، با استفاده از مشتقات سوبل پیدا می شود.
💢💢💢💢💢💢
‍ اگر ksize = 1 باشد، برای فیلتر کردن، کرنل مورد استفاده قرار می گیرد:
💢💢💢💢
import cv2
import numpy as np
from matplotlib import pyplot as plt

img = cv2.imread('dave.jpg',0)

laplacian = cv2.Laplacian(img,cv2.CV_64F)
sobelx = cv2.Sobel(img,cv2.CV_64F,1,0,ksize=5)
sobely = cv2.Sobel(img,cv2.CV_64F,0,1,ksize=5)

plt.subplot(2,2,1),plt.imshow(img,cmap = 'gray')
plt.title('Original'), plt.xticks([]), plt.yticks([])
plt.subplot(2,2,2),plt.imshow(laplacian,cmap = 'gray')
plt.title('Laplacian'), plt.xticks([]), plt.yticks([])
plt.subplot(2,2,3),plt.imshow(sobelx,cmap = 'gray')
plt.title('Sobel X'), plt.xticks([]), plt.yticks([])
plt.subplot(2,2,4),plt.imshow(sobely,cmap = 'gray')
plt.title('Sobel Y'), plt.xticks([]), plt.yticks([])

plt.show()

💢💢💢💢💢💢💢💢
در واقع، هنگام تبدیل داده ها، مشکلی پیش آمده است. شیب ها در مقیاس خاکستری با مقادیر cv2.CV_64F، هنگام تغییر از سیاه به سفید با ارزش های مثبت (شیب مثبت) بیان شده است.
در حالی که آنها با مقادیر منفی (شیب منفی) هنگام تغییر از سفید به سیاه نشان داده می شوند.
در تبدیل از cv2.CV_64F به cv2.CV_8U، تمام دامنه های منفی به 0 کاهش می یابد، و سپس اطلاعات مربوط به آن لبه ها از بین می روند. هنگامی که برنامه تصویر را نشان می دهد، لبه های سفید تا سیاه نمایش داده نخواهد شد.
برای رفع این مشکل، باید داده ها را در خروجی فیلتر در cv2.CV_64F (به جای cv2.CV_8U) نگه دارید،سپس مقدار قطعی را محاسبه کنید و در نهایت تبدیل به cv2.CV_8U را انجام دهید.
💢💢💢💢💢
import cv2
import numpy as np
from matplotlib import pyplot as plt

img = cv2.imread('blackandwhite.jpg',0)
laplacian64 = cv2.Laplacian(img, cv2.CV_64F)

sobelx64 = cv2.Sobel(img,cv2.CV_64F,1,0,ksize=5)
sobely64 = cv2.Sobel(img,cv2.CV_64F,0,1,ksize=5)

laplacian = np.uint8(np.absolute(laplacian64))
sobelx = np.uint8(np.absolute(sobelx64))
sobely = np.uint8(np.absolute(sobely64))
plt.subplot(2,2,1),plt.imshow(img,cmap = 'gray')
plt.title('Original'), plt.xticks([]), plt.yticks([])
plt.subplot(2,2,2),plt.imshow(laplacian,cmap = 'gray')
plt.title('Laplacian'), plt.xticks([]), plt.yticks([])
plt.subplot(2,2,3),plt.imshow(sobelx,cmap = 'gray')
plt.title('Sobel X'), plt.xticks([]), plt.yticks([])
plt.subplot(2,2,4),plt.imshow(sobely,cmap = 'gray')
plt.title('Sobel Y'), plt.xticks([]), plt.yticks([])

plt.show()
💢