Вычислите размытость вдоль направления x с помощью оператора sobel в OpenCV в Python - PullRequest
0 голосов
/ 07 мая 2020

Нам нужно определить, являются ли изображения, создаваемые нашим настраиваемым объективом, размытыми.

Мы хотим найти косвенную меру размытости.

Сейчас я считаю, что сначала нужно применить Sobel вдоль направления x, потому что прыжки или полосы в основном проходят в этом направлении. Затем вычисляем маргинальные средние в направлении x и, наконец, вычисляем стандартное отклонение этих предельных средних.

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

Но мы получаем противоположные результаты. Как мы могли бы улучшить этот показатель размытости?

def sobel_image_central_std(PATH):
    # use the blue channel
    img = cv2.imread(PATH)[:,:,0]

    # extract the central part of the image
    hh, ww = img.shape
    hh2 = hh // 2 
    ww2 = ww// 2
    hh4 = hh // 4
    ww4 = hh //4
    img_center = img[hh4:(hh2+hh4), ww4:(ww2+ww4)]

    # Sobel operator
    sobelx = cv2.Sobel(img_center, cv2.CV_64F, 1, 0, ksize=3)
    x_marginal = sobelx.mean(axis = 0)

    plt.plot(x_marginal)
    return(x_marginal.std())

Blur # 1

enter image description here

Blur # 2

enter image description here

Очистить # 1

enter image description here

Очистить # 2

enter image description here

1 Ответ

0 голосов
/ 07 мая 2020

В общем:

Есть ли способ определить, размыто ли изображение?

Вы можете объединить это вычисление с другим вопросом где вы ищете центральный угол.

Как только у вас есть угол (и центр, возможно, за пределами изображения), вы можете выполнить преобразование оси, чтобы удалить круговой компонент конуса. Вместо этого вы получите x (радиус) и y (угол), где y будет проходить по дугам окружности.

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

Посмотрите на системы полярных координат .

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

Итак, что вы можете исправить, так это создать синтетическое c изображение конуса с круговыми линиями и выполнить преобразование на нем. Опять же, требуется попытка и ошибка. Но он должен предоставить некоторую маску, которую вы могли бы использовать для исправления «смещения размытости».

...