Processing math: 100%

понеділок, 3 травня 2021 р.

Нерізке маскування та підйом високих частот

Mathedemo
Якщо до зображення додати (відняти) його лапласіан g(x,y)=f(x,y)+c2f(x,y),c=±1,
то отримаємо фільтр підвищення різкості з ядрами:|111]191111|,|010]151010|
які підкреслюють краї зображення.

Функція 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)+km(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)

Немає коментарів:

Дописати коментар