作者用讯飞星火生成CNI指标的代码,CNI计算过程如下:
CNI计算指标
import cv2
import numpy as np
# 读取图片
image = cv2.imread('image.jpg')
# 将图片从RGB空间转换为CIELUV颜色空间
luv_image = cv2.cvtColor(image, cv2.COLOR_BGR2Luv)
# 分离L、U、V通道
l_channel, u_channel, v_channel = cv2.split(luv_image)
# 阈值处理
l_threshold = np.where((l_channel >= 20) & (l_channel <= 80), l_channel, 0)
s_threshold = np.where((u_channel >= 0.1), u_channel, 0)
# 根据色调值定义像素类别
skin_pixels = np.where((u_channel >= 25) & (u_channel <= 70), s_threshold, 0)
grass_pixels = np.where((u_channel >= 95) & (u_channel <= 135), s_threshold, 0)
sky_pixels = np.where((u_channel >= 185) & (u_channel <= 260), s_threshold, 0)
# 计算平均饱和度值和数量
average_skin = np.mean(skin_pixels)
n_skin = np.count_nonzero(skin_pixels)
average_grass = np.mean(grass_pixels)
n_grass = np.count_nonzero(grass_pixels)
average_sky = np.mean(sky_pixels)
n_sky = np.count_nonzero(sky_pixels)
# 计算全局CNI值
n_image = (average_skin * n_skin + average_grass * n_grass + average_sky * n_sky) / (n_skin + n_grass + n_sky)
print("皮肤像素的平均饱和度值:", average_skin)
print("皮肤像素的数量:", n_skin)
print("草像素的平均饱和度值:", average_grass)
print("草像素的数量:", n_grass)
print("天空像素的平均饱和度值:", average_sky)
print("天空像素的数量:", n_sky)
print("全局CNI值:", n_image)
(内容由讯飞星火AI生成)
若各位有兴趣可以去评估CNI结果是否正确。