1.清晰图像和模糊图像之间的梯度分布不同,清晰图像的梯度有明显的重尾分布,而模糊图像不存在这种梯度分布;
2.对清晰图像进行高斯模糊;
3.使用opencv进行计算梯度,包括幅度梯度和角度梯度;
4.绘制图像的梯度直方图;
5.并计算两张图像之间的梯度差,并绘制差值的直方图。
#coding:utf-8
import matplotlib.pyplot as plt
from skimage.io import imread
import numpy as np
import cv2
img = imread('/home/xinan/s5.jpg')
# img = np.float32(img)/255.
img_blur = cv2.GaussianBlur(img, (15, 15), 0)
# img_blur = np.float32(img_blur)/255.
# 清晰图像的x,y方向的一阶导(梯度)
gx_ord = cv2.Sobel(img, cv2.CV_32F, 1, 0, ksize=1)
gy_ord = cv2.Sobel(img, cv2.CV_32F, 0, 1, ksize=1)
# 模糊图像的x,y方向的一阶导
gx_blur = cv2.Sobel(img_blur, cv2.CV_32F, 1, 0, ksize=1)
gy_blur = cv2.Sobel(img_blur, cv2.CV_32F, 0, 1, ksize=1)
# Calculate gradient magnitude and direction ( in degrees )
# cv2.cartToPolar这个函数计算二维向量(x,y)的幅度梯度和角度梯度
mag_ord, angle_ord = cv2.cartToPolar(gx_ord, gy_ord, angleInDegrees=True)
mag_blur, angle_blur = cv2.cartToPolar(gx_blur, gy_blur, angleInDegrees=True)
# bins_ord = angle_ord.max - angle_ord.min
# bins_blur =