主要包含直方图均衡化,拉普拉斯算子卷积,log,gamma增强算法
//1.直方图均衡化增强
Mat dstImg;
Mat imgRGB[3];
split(srcImg, imgRGB);
for (int i = 0; i < 3; i++)
{
equalizeHist(imgRGB[i], imgRGB[i]);
}
merge(imgRGB, 3, dstImg);
namedWindow("直方图均衡化增强图", 0);
resizeWindow("直方图均衡化增强图", srcImg.cols / 3, srcImg.rows / 3);
imshow("直方图均衡化增强图", dstImg);
//2基于拉普拉斯算子的图像增强。
Mat dstImg2;
Mat kernel = (Mat_(3, 3) << 0, -1, 0, 0, 4, 0, 0, -1, 0);//定义3*3的卷积核
filter2D(srcImg, dstImg2, CV_8UC3, kernel);
namedWindow("拉普拉斯增强图", 0);
resizeWindow("拉普拉斯增强图", srcImg.cols / 3, srcImg.rows / 3);
imshow("拉普拉斯增强图", dstImg2);
//基于log变换的图像增强(对于不同的底数,底数越大,对低灰度部分的扩展就越强,
//对高灰度部分的压缩也就越强。)
Mat dstImg3(srcImg.size(), CV_32FC3);
for (int i = 0; i < srcImg.rows; i++)
{
for (int j = 0; j < srcImg.cols; j++)
{
dstImg3.at(i, j)[0] = log(1 + srcImg.at(i, j)[0]) / log(2);//已2为底
dstImg3.at(i, j)[1] = log(1 + srcImg.at(i, j)[1]) / log(2);
dstImg3.at(i, j)[2] = log(1 + srcImg.at(i, j)[2]) / log(2);
}
}
//归一化到0~255
normalize(dstImg3, dstImg3, 0, 255, CV_MINMAX);
//转换成8bit图像显示
convertScaleAbs(dstImg3, dstImg3);
namedWindow("Log算子增强图", 0);
resizeWindow("Log算子增强图", srcImg.cols / 3, srcImg.rows / 3);
imshow("Log算子增强图", dstImg3);
//伽马变换增强。γ值以1为分界,值越小,对图像低灰度部分的扩展作用就越强,
//值越大,对图像高灰度部分的扩展作用就越强
Mat imageGamma(srcImg.size(), CV_32FC3);
for (int i = 0; i < srcImg.rows; i++)
{
for (int j = 0; j < srcImg.cols; j++)
{
imageGamma.at(i, j)[0] = pow(srcImg.at(i, j)[0], 5);
imageGamma.at(i, j)[1] = pow(srcImg.at(i, j)[1], 5);
imageGamma.at(i, j)[2] = pow(srcImg.at(i, j)[2], 5);
}
}
//归一化到0~255
normalize(imageGamma, imageGamma, 0, 255, CV_MINMAX);
//转换成8bit图像显示
convertScaleAbs(imageGamma, imageGamma);
namedWindow("Gamma算子增强图", 0);
resizeWindow("Gamma算子增强图", srcImg.cols / 3, srcImg.rows / 3);
imshow("Gamma算子增强图", dstImg3);