一种利用形态学处理的图像增强方法
2016-04-21 15:44
501 查看
对原始灰度图f,分别进行膨胀和腐蚀操作,得到两幅图像d和e,计算阈值图像t = (d+e)/2;按如下公式处理图像:
说明:对数以10为底;为了加速提前计算[1,256]的对数值;
代码如下:
最终的处理效果:
总结:这种增强方法一定程度上突现暗区域细节,对于亮度大图像,过增强!
说明:对数以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; }
最终的处理效果:
总结:这种增强方法一定程度上突现暗区域细节,对于亮度大图像,过增强!
相关文章推荐
- 智能插座那些事儿
- Android 4.4以上拍照或者从图库选择图片,获取图片路径
- Mysql之事务与视图
- jQuery之Deferred对象的使用
- td在relative模式下,IE9不显示border,chrome正常显示边框
- 递推求阶乘
- 防盗链
- WSDL文件详解
- 三大WEB服务器apache,nginx,lighttpd
- loadrunner12
- .net 中的SqlConnection连接池机制详解
- AndroidStudio简单的apk混淆
- shader 编程工具:NVIDIA FX Composer和Render Monkey
- 利用listview实现简要的QQ聊天效果
- MAT 格式操作
- JAVA基础知识点(自己总结的)
- Hive 优化
- img元素底部有空白间距的问题
- python 切片
- Java 实现导出excel表 POI