精华内容
下载资源
问答
  • 主要介绍了Python 图像对比度增强的几种方法(小结),文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
  • matlab对比度增强源代码,对比度增强是将图像中的亮度值范围拉伸或压缩成显示系统指定的亮度显示范围,从而提高图像全部或局部的对比度。输入图像中的每个亮度值通过一定的转换函数,对应于输出图像的一个显示值。
  • 基于曝光融合框架的对比度增强算法(python) 一种精确的对比度增强的算法。具体来说,我们首先使用光照估计技术为图像融合设计权重矩阵。然后,用相机的响应模型合成多重曝光图像。接下来,我们找到最佳的曝光率,...
  • 对比度增强

    2018-09-27 09:14:57
    图像对比度增强,实现灰度图像的对比度拉伸,Gamma变换,突出图像的某些信息
  • 8通道灰度图像对比度增强C代码,采用积分图优化提升算法速度。(算法参考:https://www.cnblogs.com/Leo_wl/p/3324760.html)
  • 我们无法增强彩色图像的直方图。所以我们需要将其转换为灰度,然后我们增强直方图。 通过使用直方图均衡化来增强图像的对比度。 注释中提供了对使用的内置命令的简短说明。
  • 针对传统对比度增强算法对图像增强的不足,提出一种基于形态滤波重构原图像的对比度增强方法。该方法使用多尺度top-hat变换提取图像多尺度下的亮、暗细节特征,并根据多尺度下局部细节特征的重要性,利用非线性函数对...
  • matlab开发-彩色图像对比度增强。这个程序演示了色彩空间中对比度增强的概念。
  • 包括直方图,信息隐藏和信息提取,所设计的基于图像对比度增强的可逆信息隐藏算法包含图像的对比度增强和可逆信息隐藏两个部分,主要是在灰度直方图上实现的,它并不是以追求高PSNR为目标,而是旨在实现载体图像的对比...
  • 通过使用论文“Efficient Contrast Enhancement Using Adaptive Gamma Correction With Weighting Distribution”来增强图像的对比度。 您可以在以下位置下载: ...
  • 将rgb图像转化为ycbcr,在直方图均衡化,实现彩色图片对比度增强,图片效果较好,代码简单。图像不会失真。
  • 主要介绍了具有对比度增强效果的可逆信息隐藏,根据运用的载体类型将其分为基于像素直方图的方法和基于预测误差直方图的对比度增强的方法。该系列方法的主要目的是从主观上提高载密图像的质量,并同时实现可逆信息...
  • 基于局部对比度增强的CLAHE算法 --直方图增强
  • matlab开发-图像对比度增强,使用最大亮度强度的灰度质量。最大强度覆盖直方图均衡增强图像对比度
  • 图像的批量数据增强。程序需要python环境,使用起来方便快捷。只需修改图片来源和输出路径,并根据功能调整即可
  • 用c++实现图像对比度增强,通过点算子函数来增强图像对比度,参考书上的函数,自己写的代码
  • matlab开发-对比度增强和亮度保留多分解直方图均衡。这是DavidMenotti和Co.使用多柱状图公式对论文进行的扩展。
  • 在图像增强中,我们遇到了使用灰度图像的对比度增强,同样我们也可以在颜色空间中做同样的事情,但是这个问题会根据特定的颜色空间而有所不同,例如:RGB、CMYK 和 HSI
  • 基于优化对比度增强的图像去雾算法,是该篇文章《 Optimized contrast enhancement for real-time image and video dehazing》作者写的代码,为了能够运行起来,我有修改过一点点。由于原文章提供的代码链接暂时无法...
  • 算法在两个图像集上进行性能测试,先与已有算法进行数据嵌入量比较,接着与MATLAB中3个对比度增强函数进行比较,用于评估算法的嵌入容量以及对比度增强后的图像质量。实验结果表明,所提算法在实现可逆数据隐藏和...
  • 对比度增强包 一个包含用于各种对比度增强技术(例如对数变换,指数变换,幂律变换,直方图滑动,直方图拉伸和直方图均衡)的代码的存储库
  • 【图像增强】基于局部对比度增强的CLAHE算法 --直方图增强.md
  • 一种对比度增强的边缘检测改进算法及FPGA实现.pdf
  • 摘要:提出了一种新的基于模糊逻辑的方向纹理对比度增强的方法,对指纹图像进行增强。通过模糊边缘判别器在对任一像素点属于边缘的程度进行模糊软判决的同时完成边缘检测,根据计算出的指纹方向图,结合模糊边缘判决...
  • 提出一种融合模糊区域对比度增强与阈值和形态学细化分割的新的肺实质分割算法。首先, 根据图像的灰度信息利用线性迭代聚类将图像预分割为多个超像素。然后, 根据超像素的灰度统计信息自动定位模.糊区域, 并进行...
  • 为直方图处理提供了几个函数。 它们包括:PDF、CDF 和直方图均衡化。 有关更多详细信息,请参阅:“Gonzales & Woods, DIP, 2nd. ed”。
  • 基于群稀疏理论的乳腺动态对比度增强核磁共振图像联合重建
  • 图像处理之对比度增强

    千次阅读 2020-11-25 21:39:04
    文章目录对比度增强一、对比度增强的方法?二、使用步骤1.引入库2.读入数据总结 对比度增强 在图像处理中,由于获取的图像质量不好,需要通过对比度增强来提升图片质量,主要解决的是由于图像灰度级范围较小造成的...


    对比度增强

    在图像处理中,由于获取的图像质量不好,需要通过对比度增强来提升图片质量,主要解决的是由于图像灰度级范围较小造成的对比度较低的问题,作用是使图像的灰度级范围放大,从而让图像更加清晰。

    本文所总结的内容出自张平的《opencv算法精讲》

    一、对比度增强的方法?

    对比度提升的几种常用方法:

    线性变换、直方图正规化、伽马变换、全局直方图均衡化、限制对比度的自适应直方图均衡化等。

    二、各方法的原理

    1.线性变换

    我们知道简单的线性方程公式是 y = a*x+b,对于图像亮度提升来说,此时的x,y都是二维矩阵,通过系数a来调整原始图像中的图像灰度级的范围(指的是图像转换为灰度图后的范围 [最小灰度值,最大灰度值] )

    当0<a<1时,图像灰度级方位缩小,当a>0时,图像灰度级范围扩大。
    当b>0时,亮度增加,当b<0时,亮度减小。

    代码如下:

    /*
    线性变换
    变换后的矩阵B = a*原矩阵A+b
    image:原图像
    rtype:输出矩阵的数据类型,CV_8U等
    a:上述公式中的a
    b:上述公式中的b
    */
    Mat LinearTransform(const Mat& image, int rtype, double a, double b) {
    	Mat Out;
    	image.convertTo(Out, rtype, a, b);
    	return Out;
    }
    

    2.直方图正规化

    直方图正规化其实是一种自动选取a和b的线性变换的方法。
    假设输入矩阵 I,高为H、宽为W,I(r,c)代表第r行第c列的灰度值,将 I 中的最小灰度值记为 I min,最大值记为 I max,即 I(r,c)∈[ I min, I max],为使输出矩阵 ***O***的灰度级范围为[ O min, O max],则 I(r,c)和 O(r,c)的映射关系如下:
    O ( r , c ) = O m a x − O m i n I m a x − I m i n ( I ( r , c ) − I m i n ) + O m i n O(r,c) = \frac{O_{max}-O_{min}}{I_{max}-I_{min}}(I{(r,c)}-I_{min})+O_{min} O(r,c)=ImaxIminOmaxOmin(I(r,c)Imin)+Omin
    其中 0 ≤ r < H 0\le r <H 0r<H 0 ≤ c < W 0\le c <W 0c<W O ( r , c ) O(r,c) O(r,c)代表第r行第c列的灰度值。这个过程就是直方图正规化。因为 0 ≤ I ( r , c ) − I m i n I m a x − I m i n ≤ 1 0 \le \frac{I_{(r,c)}-I_{min}}{I_{max}-I_{min}} \le 1 0ImaxIminI(r,c)Imin1,所以 O ( r , c ) ∈ [ O m i n , O m a x ] O{(r,c)} \in [O_{min},O_{max}] O(r,c)[Omin,Omax],一般令 O m i n = 0 O_{min}=0 Omin=0, O m a x = 255 O_{max}=255 Omax=255。我们将上面的公式展开后花间,可达到线性变换的a和b,
    a = O m a x − O m i n I m a x − I m i n , b = O m i n − O m a x − O m i n I m a x − I m i n ∗ I m i n a= \frac{O_{max}-O_{min}}{I_{max}-I_{min}},b=O_{min}-\frac{O_{max}-O_{min}}{I_{max}-I_{min}} * I_{min} a=ImaxIminOmaxOmin,b=OminImaxIminOmaxOminImin

    代码如下:

    Mat HistgramNormalization(Mat gray_image)
    {	
    	//获取输入矩阵的最大值和最小值
    	double Imax, Imin;
    	minMaxLoc(gray_image, &Imin, &Imax, NULL, NULL);
    
    	// 定义输出矩阵的最大值和最小值
    	double Omin = 0, Omax = 255;
    	// 确定映射关系函数中的系数,其实就是确定线性变换中的系数a和b
    	double a = (Omax - Omin) / (Imax - Imin);
    	double b = Omin - a * Imin;
    	Mat Out;//输出矩阵
    	convertScaleAbs(gray_image, Out, a, b);//进行线性变换
    	return Out;
    }
    

    3.伽马变换

    伽马变换的第一步是将灰度值归一化带 [ 0 , 1 ] [0,1] [0,1]的范围。归一化后的图像矩阵记为 I I I,高为H,宽为W,第r行第c列的值记为 I ( r , c ) I{(r,c)} I(r,c),输出矩阵击为 O O O,伽马变换就是:
    O ( r , c ) = I ( r , c ) γ , 0 ≤ r < H , 0 ≤ c < W O_{(r,c)} = I{(r,c)}^\gamma,0\le r<H,0\le c<W O(r,c)=I(r,c)γ0r<H,0c<W
    γ = 1 \gamma = 1 γ=1时,图像不变,当 0 < γ < 1 0<\gamma<1 0<γ<1时,可以增加对比度,当 γ > 1 \gamma>1 γ>1 时,可以降低对比度,接下来我们在看一下Gamma变换的的图示,这样理解起来容易点。下图中从左上角到右下角的曲线为 y = x a y=x^a y=xa,a∈[0.125,0.25,0.5,1,2,4,8],其实就是高中的幂函数,只是定义域在[0,1]之间,
    在这里插入图片描述

    代码如下:

    Mat GammaTransform(Mat gray_image, double gamma)
    {
    	//1.归一化
    	Mat fI;
    	gray_image.convertTo(fI, CV_64F, 1 / 255, 0);
    	//2.伽马变换,其实就是幂运算,gamma的区间为(0,1)
    	Mat Out;
    	pow(fI, gamma, Out);
    	//3.再次进行线性变换,转换为0,255之间的像素值
    	Out.convertTo(Out, CV_8U, 255, 0);
    	return Out;
    }
    

    4.全局直方图均衡化

    假设输入的图像为 I I I,高为 H H H,宽为 W W W h i t s I hits_I hitsI代表 I I I的灰度直方图, h i s t I ( k ) hist_I(k) histI(k)代表灰度值等于k的像素点的个数,其中 k ∈ [ 0 , 255 ] k\in[0,255] k[0,255]。全局直方图均衡化的操作就是对图像 I I I进行改变,使得输出图像 O O O的灰度直方图 h i s t O hist_O histO是‘平的’,即每一个像素值的个数是‘相等’的。这里的相等不是严格意义上的相等,而是‘约等于’,即 h i s t O ( k ) ≈ H ∗ W 256 , k ∈ [ 0 , 255 ] hist_O(k)\approx\frac{H*W}{256},k\in[0,255] histO(k)256HW,k[0,255],那么对于任意灰度级p, 0 ≤ p ≤ 255 0\le p \le 255 0p255,总能找到q, 0 ≤ q ≤ 255 0\le q \le 255 0q255,使得
    ∑ k = 0 p h i s t I ( k ) = ∑ k = 0 q h i s t O ( k ) \sum_{k=0}^phist_I(k)=\sum_{k=0}^qhist_O(k) k=0phistI(k)=k=0qhistO(k)
    其中 ∑ k = 0 p h i s t I ( k ) \sum_{k=0}^{p}hist_I(k) k=0phistI(k) ∑ k = 0 q h i s t I ( k ) \sum_{k=0}^{q}hist_I(k) k=0qhistI(k)称为 I I I O O O的累加直方图,又因为 h i s t O ( k ) ≈ H ∗ W 256 hist_O(k)\approx\frac{H*W}{256} histO(k)256HW,所以
    ∑ k = 0 p h i s t I ( k ) ≈ ( q + 1 ) H ∗ W 256 \sum_{k=0}^phist_I(k)\approx(q+1)\frac{H*W}{256} k=0phistI(k)(q+1)256HW
    化简上式得
    q ≈ ∑ k = 0 p h i s t I ( k ) H ∗ W ∗ 256 − 1 q\approx\frac{\sum_{k=0}^{p}hist_I(k)}{H*W}*256-1 qHWk=0phistI(k)2561
    上式给出了一个从亮度级为p的输入像素到亮度级为q的输出像素的映射关系,p代表的是I(r,c),是原矩阵第r行第c列的像素值,此时令p=I(r,c);q代表的是O(r,c),是输出矩阵的第r行第c列的像素值,将两个进行替换得到最终的映射关系
    O ( r , c ) ≈ ∑ k = 0 I ( r , c ) h i s t I ( k ) H ∗ W ∗ 256 − 1 O(r,c)\approx\frac{\sum_{k=0}^{I(r,c)}hist_I(k)}{H*W}*256-1 O(r,c)HWk=0I(r,c)histI(k)2561
    代码如下:

    Mat equalHist(Mat image)
    {
    	//检查图像数据类型是否符合要求,如不符合,则抛出异常
    	// CV_Assert的官方简要说明如下
    	// Checks a condition at runtime and throws exception if it fails
    	CV_Assert(image.type() == CV_8UC1);
    	// 灰度图像的宽和高
    	int rows = image.rows;
    	int cols = image.cols;
    	//第一步:计算图像的灰度直方图
    	Mat gray_hist = CalcGrayHist(image);
    	//第二步:计算累加灰度直方图
    	Mat zero_comu_moment = Mat::zeros(Size(256, 1), CV_32SC1); //生成一行256列的零矩阵
    
    	for (int p = 0; p < 256; p++)
    	{
    		if (p==0)
    		{
    			zero_comu_moment.at<int>(0, p) = gray_hist.at<int>(0, 0);
    		}
    		else
    		{
    			zero_comu_moment.at<int>(0, p) = zero_comu_moment.at<int>(0, p - 1) + gray_hist.at<int>(0, p);
    		}
    	}
    
    	//第三步:根据累加直方图得到输入灰度级和输出灰度级直方图的映射关系
    	Mat output_q = Mat::zeros(Size(256, 1), CV_8UC1);
    
    	float cofficient = 256.0 / (rows * cols);
    
    	for (int p = 0; p < 256; p++)
    	{
    		float q = cofficient * zero_comu_moment.at<int>(0, p) - 1;
    		if (q>=0)
    		{
    			output_q.at<uchar>(0, p) = uchar(floor(q));
    		}
    		else
    		{
    			output_q.at<uchar>(0, p) = 0;
    		}
    	}
    	//第四步:得到直方图均衡化后的图像
    	Mat equal_hist_image = Mat::zeros(image.size(), CV_8UC1);
    
    	for (int r = 0; r < rows; r++)
    	{
    		for (int c = 0; c < cols; c++)
    		{
    			int	p = image.at<uchar>(r, c);
    			//根据原像素值p获得新的像素值q重新赋值给对应位置
    			equal_hist_image.at<uchar>(r, c) = output_q.at<uchar>(0, p);
    		}
    	}
    	return equal_hist_image;
    }
    

    5.限制对比度的自适应直方图均衡化

    自适应直方图均衡化首先将图像划分为不重叠的区域块,然后对每一个快进行直方图均衡化,同时为了避免噪声被放大,提出了“限制对比度”,即如果某个像素点的统计数据超过某个界限,便将多余的数量平均分配到每一个像素点上。

    由此我们可以大致总结其流程:
    1.将图像分割成不重叠的区域块;
    2.对每个区域块进行直方图均衡化;
    3.为避免噪声的出现,设置一个像素点出现的最高数量,如果超过这个数量,将多出来的平均分配到每个像素点上。
    代码如下:

    Mat AdaptEqualHist(Mat gray_image)
    {
    	//构建CLAHE对象,其默认设置“限制对比度”为40,块的大小为8*8
    	Ptr<CLAHE> clahe = createCLAHE(2.0, Size(8, 8));
    	Mat dst;
    	//限制对比度的自适应直方图均衡化
    	clahe->apply(gray_image, dst);
    	return dst;
    
    }
    

    总结

    以上为亮度提升的一些基础算法,个人认为亮度提升的关键是要提升图像像素级的范围和亮度值,最基础的就是一个的线性变换。以上内容为自己学习总结,有理解不到位之处,欢迎在评论区指出。

    展开全文

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 63,133
精华内容 25,253
关键字:

对比度增强