Реализация преобразования Фурье на изображении - PullRequest
3 голосов
/ 20 июня 2020

Я пытаюсь воспроизвести алгоритм, приведенный в исследовательской статье, относительно оценки изображения по оценке размытия

Пожалуйста, найдите ниже созданную мной функцию. Я добавил баллы в комментарии к тому, что я пытался сделать.

def calculate_blur(image_name):
    img_1 = cv2.imread(image_name) # Reading the Image
    img_2 = np.fft.fft2(img_1) # Performing 2 dimensional fft on the image
    img_3 = np.fft.fftshift(img_2) #findind fc by shifting origin of F to centre
    img_4 = np.fft.ifftshift(img_3)
    af=np.abs(img_4) #Calculating the absolute value of centred Fourier Transform
    threshold=np.max(af)/1000# calculating the threshold value where the max value is calculated from absolute value
    Th=np.sum(img_2>threshold) #total number of pixels in F/img_2 whose pixel value>threshold 
    fm=Th/(img_1.shape[0]*img_1.shape[1]) #calculating the image quality measure(fm)
    if fm>0.05 : #Assuming fm>0.05 would be Not Blur (as I assumed from the results given in the research paper)
        value='Not Blur'
    else:
        value='Blur'
    return fm,value

Я вижу, что когда это изображение крупным планом с подходящим освещением, даже если изображения размыты, оценка IQM будет больше 0,05, в то время как для обычных изображений (соответствующее расстояние от камеры), по которым щелкают, отображаются хорошие результаты. Не размытие ')

blurry image detected False

This has a score of (0.035472916666666666, 'Blur')`

Обнаружено размытое изображение Верно

Я пытаюсь понять, как именно он работает в бэкэнде, т. Е. Выбираю между ними и как улучшить мою функцию и обнаружение.

1 Ответ

2 голосов
/ 27 июня 2020

Кажется, ваш код повторяет работу, описанную в статье.

К сожалению, совсем не так просто определить, размыто изображение или нет. Это можно использовать для сравнения нескольких изображений одной и той же сцены , чтобы увидеть, какое из них более резкое или более размытое. Если освещение изменится или содержимое сцены изменится, сравнение будет невозможно.

Я не знаю ни одного надежного метода, позволяющего отличить guish от неправильного сфокусировать изображение, если нет сфокусированного изображения для сравнения. Все эти методы потерпят неудачу, сообщая вам, что идеально сфокусированное изображение белой стены не в фокусе.

Лучшее, что можно сделать, это сравнить мощность (квадрат величины частотных составляющих) при более высокие частоты по сравнению с более низкими частотами (например, с использованием полосовых фильтров). Это скажет вам, есть ли на изображении какие-либо острые края или нет. Конечно, он скажет вам, что изображение не в фокусе, если сцена содержит только плавные переходы и нет резких краев.

У этого другого Q&A есть еще несколько идей.

Nit pick:

img_4 = np.fft.ifftshift(img_3) отменяет действия img_3 = np.fft.fftshift(img_2), так что img_4 == img_2. Тем не менее, смещение начала координат в области Фурье не влияет на какую-либо последующую обработку, поэтому не имеет значения, используется ли в вычислениях img_2, img_3 или img_4.

...