导向滤波算法基本已取得不错的效果,保留完整细节信息。观察去雾后的图像其亮度要比原图要低。那是因为物体光线的亮度通常不及大气光线。看一些论文里提到了自动色阶算法。查阅资料发现其就是RGB三通道进行灰度拉伸。
实现过程中使用opencv的通道分离和和合并函数并结合普通的灰度拉伸函数就可以实现 RGB三通道灰度拉伸
实现代码:
int main()
{
//[6] --自动色阶(rgb三通道灰度拉伸)
cv::Mat channels[3];
split(deFog1,channels);//不知道什么原因vector无法使用 只能用数组来表示
for(int c=0;c<3;c++)
channels[c]= grayStretch(channels[c],0.001,0.5); //根据实验 暗色像素的比例应该设置的较小效果会比较好
merge(channels,3,deFog1);
imshow("autoLevels",deFog1);
//[6]
}
//图像灰度拉伸
//src 灰度图图
//lowcut、highcut为百分比的值 如lowcut=3表示3%
//lowcut表示暗色像素个数的最小比例,大于该比例的灰度级作为最小亮度
//highcut为高亮像素个数的最小比例,大于该比例的灰度级作为最大亮度
cv::Mat grayStretch(cv::Mat src,double lowcut,double highcu