Якщо до зображення додати (відняти) його лапласіан
g(x,y)=f(x,y)+c∇2f(x,y),c=±1,
то отримаємо фільтр підвищення різкості
з ядрами:|−1−1−1]−19−1−1−1−1|,|0−10]−15−10−10|
які підкреслюють краї зображення.
Функція cv2.detailEnhance реалізовує інший алгоритм підвищення різкості:
img_details = cv2.detailEnhance(img, sigma_s=10, sigma_r=0.15)
Якщо застосувати фільтр підвищення різкості до оригінального незашумленого зображення отримуються надзвичайно чіткі нереалістичні зображення
Результати обробки зображення (ліворуч) фільтром підвищення різкості ( посередині) та функцією detailEnhance(праворуч).
Описана технологія називається нерізким маскуванням, яка поширюється на довільні фільтри. Для розмитого деяким фільтром зображення fb(x,y) нове зображення m(x,y)=f(x,y)−fb(x,y) називається маскою. Потім ця маска додається до вихідного зображення з множником k: g(x,y)=f(x,y)+k⋅m(x,y)=(k+1)f(x,y)−kfb(x,y),
що призводить до посилення високочастотних компонент. При k=1 отримуємо нерізке маскування, а при k>1 отримуємо фільтрацію з підйомом високих частот(high-boost filtering).
Реалізація в OpenCV
# Розмиваємо зображення фільтром Гауса
gauss = cv2.GaussianBlur(image, (7,7), 0)
# Вибираємо коефіцєнт
k=1
# Піднімаємо високі частоти
unsharp_image = cv2.addWeighted(image, k+1, gauss, -k, 0)
Повзунок для вибору коефіцієнта k
img=cv2.imread('foto.jpg')
img_blur=cv2.GaussianBlur(img,(3,3),3)
img_L=cv2.Laplacian(img_blur, cv2.CV_8U)
def empty(a):pass
cv2.namedWindow("TrackBars")
cv2.resizeWindow("TrackBars",300,300)
cv2.createTrackbar("k/10","TrackBars",0,100,empty)
while True:
k = cv2.getTrackbarPos("k/10","TrackBars")/10
unsharp_image = cv2.addWeighted(img, k+1, img_L, k, 0)
cv2.imshow("TrackBars", unsharp_image)
key=cv2.waitKey(3)
if key == 27:break
cv2.destroyAllWindows()
print(k)
Немає коментарів:
Дописати коментар