Удалить строку в изображении с помощью FFT - PullRequest
0 голосов
/ 07 сентября 2018

Я хотел бы удалить вертикальную линию с изображения (пример). Я взял 2D БПФ и попытался применить маску для подавления линии. Nonethelesse подход не очень эффективен, потому что я теряю важную часть информации. Как я могу улучшить обработку данных FFT? В БПФ как найти строку?

enter image description here

Мой кусок кода:

import numpy as np
import matplotlib.pyplot as plt
from skimage import io
from skimage import data, img_as_float

Path_input = "C:\\Users\\yoyo\\Desktop\\"

imggray = img_as_float(data.astronaut())[:,:,0]*255 #opening image 
imggray[:,254:255] = 0 #force a vertical line
plt.imshow(imggray);plt.show()

imfft = np.fft.fft2(imggray)
mags = np.abs(np.fft.fftshift(imfft))
angles = np.angle(np.fft.fftshift(imfft))
visual = np.log(mags)
visual2 = (visual - visual.min()) / (visual.max() - visual.min())*255
plt.imshow(visual2);plt.show()

mask = io.imread(Path_input + 'mask_astro.png')[:,:,0]
mask = (mask < 100)
visual[mask] = np.mean(visual)

newmagsshift = np.exp(visual)
newffts = newmagsshift * np.exp(1j*angles)
newfft = np.fft.ifftshift(newffts)
imrev = np.fft.ifft2(newfft)
newim2 = np.abs(imrev).astype(np.float32)

plt.imshow(newim2);plt.show()

----- РЕДАКТИРОВАТЬ ПОЗЖЕ ----

Мое "настоящее" изображение:

enter image description here

https://image.noelshack.com/fichiers/2018/36/5/1536312281-test.png

1 Ответ

0 голосов
/ 07 сентября 2018

Кажется, что ширина этой линии составляет 1 пиксель.

В этом случае вы можете избавиться от линии с горизонтальным медианным фильтром размера 3 (применительно к узкому столбцу)

Редактировать
С реальной картинкой мы видим горизонтальные дефектные ряды.

Сначала вы можете определить их Y-положение, используя фильтры для выявления краев, такие как Sobel.

Затем примените медианный фильтр с преимущественно вертикальной апертурой только к плохим областям (или к какой-то интерполяции, как заметил @SilverMonkey в комментариях).

Пример быстрой обработки OpenCV с CV_MEDIAN filter size 11 x 3, примененной дважды с двумя ROI (областью интересов) вблизи y = 110 и y = 205. Обратите внимание на хорошую компенсацию второго дефекта, но первый требует больше работы. Особенности сохранились.

enter image description here

...