目前比较公认效果较好的去雾方法的编程实现,基本原理是参考何凯明的一篇会议论文,网上已经有比较成熟的代码了。这里也就是仿写一下,这里只写到求透射率的部分,导向滤波的部分写出来有些问题就没有贴出来,机子出了点问题,先mark下等剩下的部分改完了然后在一起整理吧。参考了很多博客这里贴出来:
Single Image Haze Removal(图像去雾)-CVPR’09 Best Paper
http://blog.csdn.net/abcjennifer/article/details/6662706
暗通道优先的图像去雾算法
http://blog.csdn.net/baimafujinji/article/details/30060161
高级图像去雾算法的快速实现
http://blog.csdn.net/huixingshao/article/details/42834939
基于暗通道优先算法的去雾应用
http://www.cnblogs.com/changkaizhao/p/3266798.html
void main()
{
Mat src_img;
src_img = imread("F:\\object\\vs\\fog.jpg");
if (!src_img.data)
cout << "读取图像错误";
//完成暗通道的计算
Mat dark_ch_mat;
dark_ch_mat.create(src_img.rows, src_img.cols, CV_8U);
uchar min;
for (int i = 0; i < src_img.rows; i++)
for (int j = 0; j < src_img.cols; j++)
{
min = src_img.at<cv::Vec3b>(i, j)[0];
if (src_img.at<cv::Vec3b>(i, j)[1] < min)
min = src_img.at<cv::Vec3b>(i, j)[1];
if (src_img.at<cv::Vec3b>(i, j)[2] < min)
min = src_img.at<cv::Vec3b>(i, j)[2];
dark_ch_mat.at<uchar>(i, j) = min;
}
//对暗通道图像做最小滤波器滤波
int masksize =