ACE图像增强算法Opencv实现
来源:互联网 发布:开源元数据管理工具 编辑:程序博客网 时间:2024/05/16 12:18
1. 概述
最近翻阅图像增强算法方面的文献,偶然中找到一篇博客是写的有关ACE图像增强算法的,算法的原理比较简单。本文章中使用到的基本计算方法也是从那篇文章中得到的,这里使用Opencv进行了简单的仿真,暴露出来的问题就是这个算法运算量相当大,特别是在运算窗口很大的时候。
这里作为记录就直接贴代码了,有兴趣的可以去查看他的博客原文。
2. 实现代码
//************************************************************************// 函数名称: ACE_Enhance// 访问权限: public // 创建日期: 2016/11/23// 创 建 人: // 函数说明: 单通道增强// 函数参数: cv::Mat & src_img输入图像// 函数参数: cv::Mat & dst_img输出图像// 函数参数: unsigned int half_winSize增强窗口的半窗大小// 函数参数: double Max_Q最大Q值// 返 回 值: bool//************************************************************************bool CACE_Algorithm::ACE_Enhance(cv::Mat& src_img, cv::Mat& dst_img, unsigned int half_winSize, double Max_Q){if (!src_img.data){cout << "没有输入图像" << endl;return false;}int rows(src_img.rows);int cols(src_img.cols);unsigned char* data = nullptr;unsigned char* data1 = nullptr;cv::Mat DstImg(rows, cols, CV_8UC1, cv::Scalar::all(0));//cv::Mat temp = src_img(cv::Rect(721 - half_winSize, 6 - half_winSize, half_winSize * 2 + 1, half_winSize * 2 + 1));//截取窗口图像for (int i = half_winSize; i < (rows - half_winSize); i++){data = DstImg.ptr<unsigned char>(i);data1 = src_img.ptr<unsigned char>(i);for (int j = half_winSize; j < (cols - half_winSize); j++){cv::Mat temp = src_img(cv::Rect(j - half_winSize, i - half_winSize, half_winSize * 2 + 1, half_winSize * 2 + 1));//截取窗口图像double MeanVlaue = this->GetMeanValue(temp);double varian = this->GetVarianceValue(temp, MeanVlaue);if (0 != varian){double cg = 100.0 / std::sqrt(varian);cg = cg > Max_Q ? Max_Q : cg;double pixelvalue = cg*((double)data1[j] - MeanVlaue);int temp = MeanVlaue + pixelvalue;temp = temp > 255 ? 255 : temp;temp = temp < 0 ? 0 : temp;data[j] = temp;}}}dst_img = DstImg;return true;}//************************************************************************// 函数名称: GetMeanValue// 访问权限: public // 创建日期: 2016/11/18// 创 建 人: // 函数说明: 获取图像的平均灰度值// 函数参数: cv::Mat & src_img输入图像// 返 回 值: double//************************************************************************double CACE_Algorithm::GetMeanValue(cv::Mat& src_img){if (CV_8UC1 != src_img.type()){return -1.0;}int rows(src_img.rows);//heightint cols(src_img.cols);//widthunsigned char* data = nullptr;double PixelValueSum(0.0);//总共的像素值for (int i = 0; i < rows; i++){data = src_img.ptr<unsigned char>(i);for (int j = 0; j < cols; j++){PixelValueSum += (double)data[j];}//计算图像的总共像素值}double result(PixelValueSum / static_cast<double>(rows*cols));//计算图像的均值return result;}//************************************************************************// 函数名称: GetVarianceValue// 访问权限: public // 创建日期: 2016/11/18// 创 建 人: // 函数说明: 计算图像的均方差// 函数参数: cv::Mat & src_img输入图像// 函数参数: double MeanVlaue图像的均值// 返 回 值: double//************************************************************************double CACE_Algorithm::GetVarianceValue(cv::Mat& src_img, double MeanVlaue){if (CV_8UC1 != src_img.type()){return -1.0;}int rows(src_img.rows);//heightint cols(src_img.cols);//widthunsigned char* data = nullptr;double PixelValueSum(0.0);//总共的像素值for (int i = 0; i < rows; i++){data = src_img.ptr<unsigned char>(i);for (int j = 0; j < cols; j++){PixelValueSum += std::pow((double)(data[j] - MeanVlaue), 2);}//计算图像方差}double result(PixelValueSum / static_cast<double>(rows*cols));//计算图像的均方差return result;}
3. 效果
1 0
- ACE图像增强算法Opencv实现
- OpenCV,常用图像增强算法的实现
- OpenCV直方图图像增强算法
- 图像颜色增强算法Opencv
- OpenCV,马赛克 常用图像增强算法的实现
- Opencv 图像增强算法 图像检测结果
- Opencv 图像增强算法 图像检测结果
- Opencv 图像增强算法 图像检测结果
- ISP模块之彩色图像增强--ACE算法
- 图像增强的算法实现
- 图像增强算法实现--图像边缘提取
- Opencv 图像增强算法 图像检测结果及代码
- OpenCV图像增强算法实现(直方图均衡化、拉普拉斯、Log、Gamma)
- OpenCV图像增强算法实现(直方图均衡化、拉普拉斯、Log、Gamma)
- OpenCV图像增强算法实现(直方图均衡化、拉普拉斯、Log、Gamma)
- 自适应对比度增强(ACE)算法原理及实现
- opencv 灰度图像增强
- opencv-图像增强
- mysql 插入相同主键的解决方案
- 以太坊《私有链和联盟链的机会与挑战》报告
- Objective-C多态
- 软件需求及分析
- C语言预处理命令总结大全
- ACE图像增强算法Opencv实现
- 13 查询数据
- numpy的array和python中自带的list之间相互转化
- Sqlite 时间比较
- Linux(ubuntu)系统下安装好apache(httpd)服务后,其他电脑无法访问的原因
- ssh中dao自定义的模板类
- Mac10.12+XCode编译caffe(含GPU加速)
- 13 修改数据
- 如何获取下拉日历的月首