Нам нужно определить, являются ли изображения, создаваемые нашим настраиваемым объективом, размытыми.
Мы хотим найти косвенную меру размытости.
Сейчас я считаю, что сначала нужно применить 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
Blur # 2
Очистить # 1
Очистить # 2