import cv2
image = r'E:\odmxiaoyuan\notree\right\class_rec_A\10\18.jpg'
img = cv2.imread(image)
img_gray=cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)#转为灰度图
img_hsv =cv2.cvtColor(img,cv2.COLOR_BGR2HSV)#转换为HSV三通道图像
H,S,V=cv2.split(img_hsv)#将三通道分开
plt.figure(figsize=(10,4.5))
fs = 15
plt.subplot(2,2,1)
plt.tick_params(labelbottom=False, labelleft=False)
plt.imshow(img_hsv,cmap='hsv')
plt.title('HSV', fontsize=fs)
plt.subplot(2,2,2)
plt.tick_params(labelbottom=False, labelleft=False)
plt.imshow(H)
plt.title('H(hue)', fontsize=fs)
plt.subplot(2,2,3)
plt.tick_params(labelbottom=False, labelleft=False)
plt.imshow(S)
plt.title('S(saturation)', fontsize=fs)
plt.subplot(2,2,4)
plt.tick_params(labelbottom=False, labelleft=False)
plt.imshow(V)
plt.title('V(value)', fontsize=fs)
H为色调,S为饱和度,V为亮度。
在HSV模型中,阴影区域主要有以下特点:
①具有更大的色调值H;
②具有高饱和度S,因为散射光线主要来自波长更短的蓝紫色光;
③太阳光线被阻挡,导致明度V较低。
④当图像转换到频域时,阴影区域显示为低频
⑤阴影区域的表面纹理属性会被保留下来。
⑥色彩恒常性,光强度变化不会影响人眼的判断。对于同一对象,只要亮度相同,对于人的视觉系统来说,相同纹理背景的阴影区域和非阴影区域的视觉效果都相同。例如:在 RGB 颜色空间中,若某区域 3 通道的颜色值都以相同比例减小,那么该区域大概率属于阴影区域。阴影区域的图像色调是几乎保持不变的。色调即为 3 通道颜色值的比率。阴影和非阴影区交汇的边缘和自身所属区域的纹理特征基本保持一致,这样的性质就是色彩恒常性。
1、检测阴影的方法直接的是阈值法。就是使用一个阈值 T 0 T_0 T0使得 T > T 0 T>T_0 T>T0则为阴影, T < T 0 T
大律法(Otsu)计算阈值
m = double(((s - v) / (h + s + v)))
img_nos=np.where(m,255,img_gray)#阴影部分像素转为255,其他为灰度值
2、连续两次进行HSV彩色空间变换,区分阴影。
优化:进行图像的腐蚀和扩展算子将散落的点形成面。