Нам нужно определить, являются ли изображения, создаваемые нашим настраиваемым объективом, размытыми.
Мы хотим найти косвенную меру размытости.
Сейчас я считаю, что сначала нужно применить 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](https://i.stack.imgur.com/0EyrY.png)
Blur # 2
![enter image description here](https://i.stack.imgur.com/EEC48.png)
Очистить # 1
![enter image description here](https://i.stack.imgur.com/3VMPA.jpg)
Очистить # 2
![enter image description here](https://i.stack.imgur.com/uQQlW.jpg)