您的位置:首页 > 其它

一种利用形态学处理的图像增强方法

2016-04-21 15:44 501 查看
对原始灰度图f,分别进行膨胀和腐蚀操作,得到两幅图像d和e,计算阈值图像t = (d+e)/2;按如下公式处理图像:



说明:对数以10为底;为了加速提前计算[1,256]的对数值;

代码如下:

const double logLUT[256] = {0,0.30103,0.477121,0.60206,0.69897,0.778151,0.845098,0.90309,0.954243,1,1.04139,1.07918,
1.11394,1.14613,1.17609,1.20412,1.23045,1.25527,1.27875,1.30103,1.32222,1.34242,1.36173,
1.38021,1.39794,1.41497,1.43136,1.44716,1.4624,1.47712,1.49136,1.50515,1.51851,1.53148,
1.54407,1.5563,1.5682,1.57978,1.59106,1.60206,1.61278,1.62325,1.63347,1.64345,1.65321,
1.66276,1.6721,1.68124,1.6902,1.69897,1.70757,1.716,1.72428,1.73239,1.74036,1.74819,
1.75587,1.76343,1.77085,1.77815,1.78533,1.79239,1.79934,1.80618,1.81291,1.81954,1.82607,
1.83251,1.83885,1.8451,1.85126,1.85733,1.86332,1.86923,1.87506,1.88081,1.88649,1.89209,
1.89763,1.90309,1.90849,1.91381,1.91908,1.92428,1.92942,1.9345,1.93952,1.94448,1.94939,
1.95424,1.95904,1.96379,1.96848,1.97313,1.97772,1.98227,1.98677,1.99123,1.99564,2,2.00432,
2.0086,2.01284,2.01703,2.02119,2.02531,2.02938,2.03342,2.03743,2.04139,2.04532,2.04922,
2.05308,2.0569,2.0607,2.06446,2.06819,2.07188,2.07555,2.07918,2.08279,2.08636,2.08991,
2.09342,2.09691,2.10037,2.1038,2.10721,2.11059,2.11394,2.11727,2.12057,2.12385,2.1271,
2.13033,2.13354,2.13672,2.13988,2.14301,2.14613,2.14922,2.15229,2.15534,2.15836,2.16137,
2.16435,2.16732,2.17026,2.17319,2.17609,2.17898,2.18184,2.18469,2.18752,2.19033,2.19312,
2.1959,2.19866,2.2014,2.20412,2.20683,2.20952,2.21219,2.21484,2.21748,2.22011,2.22272,
2.22531,2.22789,2.23045,2.233,2.23553,2.23805,2.24055,2.24304,2.24551,2.24797,2.25042,
2.25285,2.25527,2.25768,2.26007,2.26245,2.26482,2.26717,2.26951,2.27184,2.27416,2.27646,
2.27875,2.28103,2.2833,2.28556,2.2878,2.29003,2.29226,2.29447,2.29667,2.29885,2.30103,
2.3032,2.30535,2.3075,2.30963,2.31175,2.31387,2.31597,2.31806,2.32015,2.32222,2.32428,
2.32634,2.32838,2.33041,2.33244,2.33445,2.33646,2.33846,2.34044,2.34242,2.34439,2.34635,
2.3483,2.35025,2.35218,2.35411,2.35603,2.35793,2.35984,2.36173,2.36361,2.36549,2.36736,
2.36922,2.37107,2.37291,2.37475,2.37658,2.3784,2.38021,2.38202,2.38382,2.38561,2.38739,
2.38917,2.39094,2.3927,2.39445,2.3962,2.39794,2.39967,2.4014,2.40312,2.40483,2.40654,2.40824};
/************************************************************************/
/* Function : enhance image by morphological  in poor lighting
parameters:
return :
*/
/************************************************************************/
int enhanceImgByMM(const Mat grayImg, Mat &dest, Size blockSize)
{
if (grayImg.empty())
{
return 0;
}
Mat subImg = grayImg.clone();
if (subImg.channels()!=1)
{
cvtColor(subImg, subImg, CV_RGB2GRAY);
}
Mat elementSt = getStructuringElement(MORPH_RECT, blockSize);
Mat diaImg, eroImg,  enhanceImg;
morphologyEx(subImg, diaImg, MORPH_DILATE, elementSt);
morphologyEx(subImg, eroImg, MORPH_ERODE, elementSt);
Mat dDiaImg, dEroImg, TImg;
diaImg.convertTo(dDiaImg, CV_32FC1);
eroImg.convertTo(dEroImg, CV_32FC1);
subImg.convertTo(enhanceImg, CV_32FC1);
TImg = (dDiaImg+dEroImg)/2;
for (int i=0;i<subImg.rows;i++)
{
for (int j=0;j<subImg.cols;j++)
{
double coefficient = (255.0 - TImg.at<float>(i, j))/logLUT[255];
if (enhanceImg.at<float>(i, j)<=TImg.at<float>(i, j))
{
enhanceImg.at<float>(i, j) = coefficient*logLUT[subImg.at<uchar>(i, j)]+dDiaImg.at<float>(i, j);
}
else
{
enhanceImg.at<float>(i, j) = coefficient*logLUT[subImg.at<uchar>(i, j)]+dEroImg.at<float>(i, j);
}
}
}
enhanceImg.convertTo(dest, CV_8UC1);
return 1;
}


最终的处理效果:



总结:这种增强方法一定程度上突现暗区域细节,对于亮度大图像,过增强!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: