Opencv图像增强算法

一、opencv常用图像增强算法比较

1. 直方图均衡化

直方图均衡化是图像处理领域中利用图像直方图对对比度进行调整的方法。这种方法通常用来增加许多图像的局部对比度。这种方法对于背景和前景都太亮或者太暗的图像非常有用,这种方法尤其是可以带来X光图像中更好的骨骼结构显示以及曝光过度或者曝光不足照片中更好的细节。这种方法的一个主要优势是它是一个相当直观的技术并且是可逆操作。

2.对数图像增强算法

对数图像增强是图像增强的一种常见方法,其公式为: S = c log(r+1),其中c是常数(以下算法c=255/(log(256)),这样可以实现整个画面的亮度增大。
##3.指数图像增强算法
指数图像增强的表达为:S = cR^r,通过合理的选择c和r可以压缩灰度范围,算法以c=1.0/255.0, r=2实现。

4.加Masaic算法(马赛克)

在日常中有时候保密或其他需要将图像马赛克,下面的算法实现图像马赛克功能(原理:用中心像素来表示邻域像素)。
##5.曝光过度问题处理
对于曝光过度问题,可以通过计算当前图像的反相(255-image),然后取当前图像和反相图像的较小者为当前像素位置的值

6.高反差保留

高反差保留主要是将图像中颜色、明暗反差较大两部分的交界处保留下来,比如图像中有一个人和一块石头,那么石头的轮廓线和人的轮廓线以及面部、服装等有明显线条的地方会变被保留,儿其他大面积无明显明暗变化的地方则生成中灰色。其表达形式为:dst = r*(img - Blur(img))。
##7.拉普拉斯算子图像增强
使用中心为5的8邻域拉普拉斯算子与图像卷积可以达到锐化增强图像的目的。

8.Gamma校正

伽马变换主要用于图像的校正,将灰度过高或者灰度过低的图片进行修正,增强对比度。伽马变换对图像的修正作用其实就是通过增强低灰度或高灰度的细节实现的。

二、opencv直方图均衡化算法实现

参考网页:https://blog.csdn.net/qq_18343569/article/details/48029245

void equalizeHist(InputArray src, OutputArray dst)

函数作用:

直方图均衡化,用于提高图像的质量

Mat mat = QImage2cvMat(img);
//用来存储各通道图片的向量
vector<Mat> splitBGR(mat.channels());
//分割通道,存储到splitBGR中
split(mat, splitBGR);
//对各个通道分别进行直方图均衡化
for (int i = 0; i<mat.channels(); i++)
	equalizeHist(splitBGR[i], splitBGR[i]);
//合并通道
Mat mergeImg;
merge(splitBGR, mergeImg);

三、拉普拉斯算子图像增强

​ Mat image = imread("Test.jpg", 1);
​ if (image.empty())
​ {
​ std::cout << "打开图片失败,请检查" << std::endl;
​ return -1;
​ }
​ imshow("原图像", image);
​ Mat imageEnhance;
​ Mat kernel = (Mat_(3, 3) << 0, -1, 0, -1, 5, -1, 0, -1, 0);
​ filter2D(image, imageEnhance, CV_8UC3, kernel);
​ imshow("拉普拉斯算子图像增强效果", imageEnhance);

四、基于对数Log变换的图像增强

Mat image = imread("Test.jpg");
Mat imageLog(image.size(), CV_32FC3);
for (int i = 0; i < image.rows; i++)
{
	for (int j = 0; j < image.cols; j++)
	{
		imageLog.at<Vec3f>(i, j)[0] = log(1 + image.at<Vec3b>(i, j)[0]);
		imageLog.at<Vec3f>(i, j)[1] = log(1 + image.at<Vec3b>(i, j)[1]);
		imageLog.at<Vec3f>(i, j)[2] = log(1 + image.at<Vec3b>(i, j)[2]);
	}
}
//归一化到0~255  
normalize(imageLog, imageLog, 0, 255, CV_MINMAX);
//转换成8bit图像显示  
convertScaleAbs(imageLog, imageLog);
imshow("Soure", image);
imshow("after", imageLog);

评论

Your browser is out-of-date!

Update your browser to view this website correctly. Update my browser now

×