暗通道计算
import cv2
import numpy as np
import matplotlib.pyplot as plt
def dark_channel(image, window_size=15):
rows, cols, _ = image.shape
dark_channel = np.zeros((rows, cols), dtype=np.uint8)
for i in range(rows):
for j in range(cols):
start_x, end_x = max(i - window_size//2, 0), min(i + window_size//2, rows-1)
start_y, end_y = max(j - window_size//2, 0), min(j + window_size//2, cols-1)
patch = image[start_x:end_x+1, start_y:end_y+1, :]
dark_channel[i, j] = np.min(patch)
return dark_channel
image = cv2.imread(file)
print(image.shape)
dark_channel_img = dark_channel(image)
plt.subplot(121)
plt.imshow(cv2.cvtColor(image, cv2.COLOR_BGR2RGB))
plt.title('Original Image')
plt.axis('off')
plt.subplot(122)
plt.imshow(dark_channel_img, cmap='gray')
plt.title('Dark Channel Image')
plt.axis('off')
plt.show()
对比度计算
import cv2
import numpy as np
import matplotlib.pyplot as plt
def contrast_image(image):
mean_value = np.mean(image)
contrast_img = np.abs(image - mean_value)
contrast_img = (255 * (contrast_img / np.max(contrast_img))).astype(np.uint8)
return contrast_img
image = cv2.imread(file)
gray_image = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
contrast_img = contrast_image(gray_image)
plt.subplot(121)
plt.imshow(cv2.cvtColor(image, cv2.COLOR_BGR2RGB))
plt.title('Original Image')
plt.axis('off')
plt.subplot(122)
plt.imshow(contrast_img, cmap='gray')
plt.title('Contrast Image')
plt.axis('off')
plt.show()
饱和度计算
import cv2
import numpy as np
import matplotlib.pyplot as plt
def saturation_image(image):
hsv_image = cv2.cvtColor(image, cv2.COLOR_BGR2HSV)
saturation_img = hsv_image[:, :, 1]
saturation_img = (255 * (saturation_img / np.max(saturation_img))).astype(np.uint8)
return saturation_img
image = cv2.imread(file)
saturation_img = saturation_image(image)
plt.subplot(121)
plt.imshow(cv2.cvtColor(image, cv2.COLOR_BGR2RGB))
plt.title('Original Image')
plt.axis('off')
plt.subplot(122)
plt.imshow(saturation_img, cmap='gray')
plt.title('Saturation Image')
plt.axis('off')
plt.show()
色度计算
import cv2
import numpy as np
import matplotlib.pyplot as plt
def chroma_image(image):
hsv_image = cv2.cvtColor(image, cv2.COLOR_BGR2HSV)
chroma_img = hsv_image[:, :, 0]
chroma_img = (255 * (chroma_img / np.max(chroma_img))).astype(np.uint8)
return chroma_img
image = cv2.imread(file)
chroma_img = chroma_image(image)
plt.subplot(121)
plt.imshow(cv2.cvtColor(image, cv2.COLOR_BGR2RGB))
plt.title('Original Image')
plt.axis('off')
plt.subplot(122)
plt.imshow(chroma_img, cmap='gray')
plt.title('Chroma Image')
plt.axis('off')
plt.show()
色度方差计算
import cv2
import numpy as np
import matplotlib.pyplot as plt
def chroma_variance_image(image):
hsv_image = cv2.cvtColor(image, cv2.COLOR_BGR2HSV)
chroma_img = hsv_image[:, :, 0]
chroma_variance_img = cv2.Sobel(chroma_img, cv2.CV_64F, 1, 0, ksize=3)**2
chroma_variance_img = (255 * (chroma_variance_img / np.max(chroma_variance_img))).astype(np.uint8)
return chroma_variance_img
image = cv2.imread(file)
chroma_variance_img = chroma_variance_image(image)
plt.subplot(121)
plt.imshow(cv2.cvtColor(image, cv2.COLOR_BGR2RGB))
plt.title('Original Image')
plt.axis('off')
plt.subplot(122)
plt.imshow(chroma_variance_img, cmap='gray')
色彩丰富度计算
import cv2
import numpy as np
import matplotlib.pyplot as plt
def colorfulness_image(image):
hsv_image = cv2.cvtColor(image, cv2.COLOR_BGR2HSV)
saturation = hsv_image[:, :, 1]
value = hsv_image[:, :, 2]
saturation_variance = cv2.Sobel(saturation, cv2.CV_64F, 1, 0, ksize=3)**2
value_variance = cv2.Sobel(value, cv2.CV_64F, 1, 0, ksize=3)**2
colorfulness_img = np.sqrt(saturation_variance + value_variance)
colorfulness_img = (255 * (colorfulness_img / np.max(colorfulness_img))).astype(np.uint8)
return colorfulness_img
image = cv2.imread(file)
colorfulness_img = colorfulness_image(image)
plt.subplot(121)
plt.imshow(cv2.cvtColor(image, cv2.COLOR_BGR2RGB))
plt.title('Original Image')
plt.axis('off')
plt.subplot(122)
plt.imshow(colorfulness_img, cmap='gray')
plt.title('Colorfulness Image')
plt.axis('off')
plt.show()
锐度计算
import cv2
import numpy as np
import matplotlib.pyplot as plt
def sharpness_image(image):
gray_image = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
gradient_x = cv2.Sobel(gray_image, cv2.CV_64F, 1, 0, ksize=3)
gradient_y = cv2.Sobel(gray_image, cv2.CV_64F, 0, 1, ksize=3)
sharpness_img = np.sqrt(gradient_x**2 + gradient_y**2)
sharpness_img = (255 * (sharpness_img / np.max(sharpness_img))).astype(np.uint8)
return sharpness_img
image = cv2.imread(file)
sharpness_img = sharpness_image(image)
plt.subplot(121)
plt.imshow(cv2.cvtColor(image, cv2.COLOR_BGR2RGB))
plt.title('Original Image')
plt.axis('off')
plt.subplot(122)
plt.imshow(sharpness_img, cmap='gray')
plt.title('Sharpness Image')
plt.axis('off')
plt.show()
图像熵计算
import cv2
import numpy as np
import matplotlib.pyplot as plt
def entropy_image(image):
gray_image = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
hist = cv2.calcHist([gray_image], [0], None, [256], [0, 256])
hist_prob = hist / np.sum(hist)
entropy = -np.sum(hist_prob * np.log2(hist_prob + 1e-8))
entropy_img = np.ones_like(gray_image) * entropy
return entropy_img
file = "D:\\My_Document\\Task\\Github_Project_Package\\image_recognition_visibility\\examples\\class4\\19.51_share_data5_VIDEO_PIC_tianjinHighway_20230210_123306000000022044_202302100630.jpg"
image = cv2.imread(file)
entropy_img = entropy_image(image)
plt.subplot(121)
plt.imshow(cv2.cvtColor(image, cv2.COLOR_BGR2RGB))
plt.title('Original Image')
plt.axis('off')
plt.subplot(122)
plt.imshow(entropy_img, cmap='gray')
plt.title('Entropy Image')
plt.axis('off')
plt.show()