java图像增强 对数_OpenCV图像增强之对数变换log C++
OpenCV图像增强之对数变换log C++
OpenCV图像增强之对数变换log C++
对数变换的通用形式为:
对数函数的一般形状的任何曲线,都能完成图像灰度级的扩展/压缩;但幂律变换对于这个目的更为通用;
代码实现:
#include
#include
#include
#include
using namespace cv;
using namespace std;
//注意opencv中的log函数只能处理灰度图片,或单层图片
//基于源图像的方法1
Mat logTransform1(Mat srcImage, int c)
{
if (srcImage.empty())
cout << "No data" << endl;
Mat resultImage = Mat::zeros(srcImage.size(), srcImage.type());
add(srcImage, Scalar(1.0), srcImage); //计算 r+1
srcImage.convertTo(srcImage, CV_32F); //转化为32位浮点型
log(srcImage, resultImage); //计算log(1+r)
resultImage = c*resultImage;
//归一化处理
normalize(resultImage, resultImage, 0, 255, NORM_MINMAX);
convertScaleAbs(resultImage, resultImage);
return resultImage;
}
//方法2
Mat logTransform2(Mat srcImage, float c)
{
if (srcImage.empty())
cout << "No data" << endl;
Mat resultImage = Mat::zeros(srcImage.size(), srcImage.type());
double gray = 0;
for (int i = 0; i < srcImage.rows; i++)
{
for (int j = 0; j < srcImage.cols; j++)
{
gray = (double)srcImage.at(i, j);
gray = c*log((double)(1 + gray));
resultImage.at(i, j) = saturate_cast(gray);
}
}
//归一化处理
normalize(resultImage, resultImage, 0, 255, NORM_MINMAX);
convertScaleAbs(resultImage, resultImage);
return resultImage;
}
//方法3
Mat logTransform3(Mat srcImage, float c)
{
if (srcImage.empty())
cout << "No data" << endl;
Mat resultImage = Mat::zeros(srcImage.size(), srcImage.type());
srcImage.convertTo(resultImage, CV_32F); //图像类型转换
resultImage = resultImage + 1; //图像矩阵元素加1
log(resultImage,resultImage);
resultImage = c*resultImage;
//归一化处理
normalize(resultImage, resultImage, 0, 255, NORM_MINMAX);
convertScaleAbs(resultImage, resultImage);
return resultImage;
}
int main()
{
Mat srcImage = imread("123.tif", IMREAD_GRAYSCALE);
if (!srcImage.data)
return -1;
imshow("srcImage", srcImage);
float c = 1.2;
Mat resultImage;
resultImage = logTransform3(srcImage, c);
imshow("resultImage", resultImage);
waitKey(0);
return 0;
}
下图为原图像、log增强后的图像
下面代码可处理彩色图像:
代码如下:
// log.cpp
/*
* 对数函数的一般形状的任何曲线,都能完成图像灰度级的扩展/压缩;但幂律变换对于这个目的更为通用;
* s = c*log(1+r)
* 注意Opencv 中的log函数只能处理灰度图片,或单层图片
*/
#include
#include
#include
using namespace std;
using namespace cv;
Mat logTransform(Mat srcImage, float c_log)
{
if (srcImage.empty())
cout << "No data" << endl;
CV_Assert(srcImage.channels() == 3);
Mat imageLog = Mat::zeros(srcImage.size(), srcImage.type());
srcImage.convertTo(imageLog, CV_32F); //图像类型转换
for (int i = 0; i < srcImage.rows; i++) {
for (int j = 0; j < srcImage.cols; j++){
imageLog.at(i, j)[0] = c_log*log(1 + srcImage.at(i, j)[0]);
imageLog.at(i, j)[1] = c_log*log(1 + srcImage.at(i, j)[1]);
imageLog.at(i, j)[2] = c_log*log(1 + srcImage.at(i, j)[2]);
}
}
//归一化到0~255
normalize(imageLog, imageLog, 0, 255, CV_MINMAX);
//转换成8bit图像显示
convertScaleAbs(imageLog, imageLog);
return imageLog;
}
int main(int argc, char *argv[])
{
Mat image = imread("image.jpg", IMREAD_COLOR);
Mat dst =logTransform(image, 1);
imshow("Soure", image);
imshow("after", dst);
waitKey();
return 0;
}
结果如下:
OpenCV图像增强之对数变换log C++相关教程
java图像增强 对数_OpenCV图像增强之对数变换log C++相关推荐
- 【OpenCV 例程200篇】50. 图像增强—直方图统计量图像增强
[OpenCV 例程200篇]50. 图像增强-直方图统计量图像增强 欢迎关注 『OpenCV 例程200篇』 系列,持续更新中 欢迎关注 『Python小白的OpenCV学习课』 系列,持续更新中 ...
- java.util.ServiceConfigurationError: org.apache.juli.logging.Log: Provider org.eclipse.jetty.apache.
在用maven项目的时候,项目原本部署在 Tomcat 服务器上,一切正常,但是部署到 Jetty 后,启动报错.关键错误信息为 "java.lang.NoClassDefFoundErro ...
- opencv 实现等值线_OpenCV图像增强算法实现(直方图均衡化、拉普拉斯、Log、Gamma)...
1. 基于直方图均衡化的图像增强 直方图均衡化是通过调整图像的灰阶分布,使得在0~255灰阶上的分布更加均衡,提高了图像的对比度,达到改善图像主观视觉效果的目的.对比度较低的图像适合使用直方图均衡化方 ...
- OpenCV图像增强之对数变换log C++
对数变换的通用形式为: 对数函数的一般形状的任何曲线,都能完成图像灰度级的扩展/压缩:但幂律变换对于这个目的更为通用: 代码实现: #include <opencv2/core/core.hpp ...
- 如何用java取对数_使用Java中的Math.log获取自然对数值
要获取数字的自然对数,我们使用java.lang.Math.log()方法.Math.log()方法返回自然对数,即log以double值的底数e为底.如果传递的值为NaN或负数,则结果为NaN.如果 ...
- retinex 的水下图像增强算法_图像增强论文:腾讯优图CVPR2019
Underexposed Photo Enhancement using Deep Illumination Estimation 基于深度学习优化光照的暗光下的图像增强 论文地址:Underexpo ...
- 关于java中对数的计算
最近为了计算文档间的相关性需要用到对数的计算,在网上找到下面的方法: 其中的关键是:1 java标准包提供了自然对数的计算方法,2 其他的对数计算可以转换为自然对数的计算. 下面是转贴:但不知道谁是原 ...
- python图像增强算法_retinex图像增强算法的研究
图像增强方面我共研究了Retinex.暗通道去雾.ACE等算法.其实,它们都是共通的.甚至可以说,Retinex和暗通道去雾就是同一个算法的两个不同视角,而ACE算法又是将Retinex和灰度世界等白 ...
- 对数 java_关于java中对数的计算
最近为了计算文档间的相关性需要用到对数的计算,在网上找到下面的方法: 其中的关键是:1 java标准包提供了自然对数的计算方法,2 其他的对数计算可 以转换为自然对数的计算. 下面是转贴:但不知道谁是 ...
- Java | 使用对数器判断自己的程序是否正确(generateRandomArray)
对数器:利用系统产生多个随机样本,将系统排序的结果和自己写的程序输出结果进行比对,判断是否正确. 目录结构 SelectionSort.java DataChecker.java 1 选择排序程序完整 ...
最新文章
- 网络安全界永恒不变的10大安全法则
- android fragment 弹出对话框,Android DialogFragment弹框实现
- wireshark抓包常见提示含义解析
- 纯js上传文件 很好用
- (计算机组成原理题目题型总结)第二章:数据的表示和运算
- C语言手写自定义三维数组
- 李礼辉:如何进行必要的数字金融制度建设等问题值得关注
- 苹果应用审核走进中国!
- vsftp匿名访问目录_怎么更改vsftp匿名用户的默认登录目录/var/ftp?
- access建立er图_ER图的构建
- ADS学习笔记—3.仿真实例
- java冒泡排序和插入排序
- 我奋斗了18年才和你坐在一起喝咖啡
- 解决云帆小说下载阅读器不能下载https网址的问题
- python四分位数_Python:获取四分位数的数组索引
- 持续分化的 NFT 市场:新的金字塔正在形成
- N-S图、PAD图(例题)
- 如何随意复制网页上的文字
- Android实现直播的博文和流程(全过程,超详细/附源码)
- C - Monthly Expense