基于乘方增强算法的图像增强
void enhence(cv::Mat&srcmat)
{
if (srcmat.channels() > 1)
{
cv::cvtColor(srcmat, srcmat, cv::COLOR_BGR2GRAY);
}
int low_bound = 65;
int up_bound = 180;
float pow_index = 1.5;
for (int i = 0; i < srcmat.rows; i++)
{
for (int j = 0; j < srcmat.cols; j++)
{
if (srcmat.at<uchar>(i, j) < low_bound)
{
srcmat.at<uchar>(i, j) = 0;
}
else if (srcmat.at<uchar>(i, j) > up_bound)
{
srcmat.at<uchar>(i, j) = 255;
}
else
{
srcmat.at<uchar>(i, j) = (unsigned char)(255.0 *(powf((srcmat.at<uchar>(i, j) - low_bound), pow_index) / powf((up_bound - low_bound), pow_index))); //目前pow_index = 1.5
}
}
}
}
对数增强
void LogEnhance(cv::Mat&srcmat)
{
if (srcmat.channels() > 1)
{
cv::cvtColor(srcmat, srcmat, cv::COLOR_BGR2GRAY);
}
int low_bound = 80;
int up_bound = 180;
for (int i = 0; i < srcmat.rows; i++)
{
for (int j = 0; j < srcmat.cols; j++)
{
if (srcmat.at<uchar>(i, j) < low_bound)
{
srcmat.at<uchar>(i, j) = 0;
}
else if (srcmat.at<uchar>(i, j) > up_bound)
{
srcmat.at<uchar>(i, j) = 255;
}
else
{
srcmat.at<uchar>(i, j) = (unsigned char)(255.0 *(logf(srcmat.at<uchar>(i, j) - low_bound) / logf(up_bound - low_bound))); //
}
}
}
imwrite("E:\\pic\\LogEnhance.jpg", srcmat);
}
线性增强
void LinearEnhance(cv::Mat&srcmat)
{
if (srcmat.channels() > 1)
{
cv::cvtColor(srcmat, srcmat, cv::COLOR_BGR2GRAY);
}
int low_bound = 50;
int up_bound = 130;
for (int i = 0; i < srcmat.rows; i++)
{
for (int j = 0; j < srcmat.cols; j++)
{
if (srcmat.at<uchar>(i, j) < low_bound)
{
srcmat.at<uchar>(i, j) = 0;
}
else if (srcmat.at<uchar>(i, j) > up_bound)
{
srcmat.at<uchar>(i, j) = 255;
}
else
{
srcmat.at<uchar>(i, j) = (unsigned char)(255.0 *((srcmat.at<uchar>(i, j) - low_bound)/ (up_bound - low_bound))); //
}
}
}
imwrite("E:\\pic\\LinearEnhance.jpg", srcmat);
}
指数增强
void ExpEnhance(cv::Mat&srcmat)
{
if (srcmat.channels() > 1)
{
cv::cvtColor(srcmat, srcmat, cv::COLOR_BGR2GRAY);
}
int low_bound = 80;
int up_bound = 130;
for (int i = 0; i < srcmat.rows; i++)
{
for (int j = 0; j < srcmat.cols; j++)
{
if (srcmat.at<uchar>(i, j) < low_bound)
{
srcmat.at<uchar>(i, j) = 0;
}
else if (srcmat.at<uchar>(i, j) > up_bound)
{
srcmat.at<uchar>(i, j) = 255;
}
else
{
srcmat.at<uchar>(i, j) = (unsigned char)(255.0 *(expf(srcmat.at<uchar>(i, j) - low_bound) / expf(up_bound - low_bound))); //
}
}
}
imwrite("E:\\pic\\ExpEnhance.jpg", srcmat);
}