精华内容
下载资源
问答
  • 灰度分统计法计算图像的对比度

    千次阅读 2019-01-11 21:44:10
    灰度分统计法计算图像的对比度插入链接与图片如何插入一段漂亮代码片生成一个适合你列表创建一个表格设定内容居中、居左、居右SmartyPants创建一个自定义列表如何创建一个注脚注释也是必不可少KaTeX数学公式...

    灰度差分统计法计算图像的对比度
    本文采用灰度差分统计法计算图像的对比度、角度方向二阶矩、熵、平均值来描述纹理图像的特征,具体原理如下:
    设(x,y)为图像中的一点,该点与和它只有微小距离的点(x+△x,y+△y)的灰度差分值为
    g△(x,y)=g(x,y)-g(x+△x,y+△y)
    式中,g△为灰度差分。设灰度差分的所有可能取值共有m级,令点(x,y)在整幅图像上移动,累计出g△(x,y)取各个数值的次数,由此便可以做出g△(x,y)的直方图。由直方图可以知道g△(x,y)取值的概率p△(i),i在1~m之间取值
    当较小的i值的概率p△(i)较大时,说明纹理较粗糙,当p△(i)的各个取值较接近时,即概率分布较平坦时,说明纹理较细。
    对比度计算公式
    CON = ∑i^2PΔ(i)
    角度方向计算公式
    ASM=CON = ∑i[PΔ(i)]^2,

    ENT= -∑iPΔ(i)lg PΔ(i)
    平均值
    MEAN = 1/m ∑iPΔ(i)

    结果如下:
    以LINA作为示例
    原图像
    图像直方图
    在这里插入图片描述

    插入链接与图片

    计算结果
    在这里插入图片描述

    #include<opencv2/opencv.hpp>
    #include<opencv2/core/core.hpp>
    #include<iostream>
    #include<math.h>
    using namespace std;
    using namespace cv;
    /*绘制直方图函数*/
    void show_his(Mat &Image,Mat &HI)
    {
    	int channels = 0;    //计算图像的通道
    	MatND disHist;        //配置输出的结果
    	int histSize[] = { 256 };//将数值分组,每个灰度范围一组
    	float midRanges[] = { 0, 256 };  //确定每个维度的取值范围
    	const float *ranges[] = { midRanges };
    	//调用calcHist函数,将直方图的信息存储到disHist
    	calcHist(&Image, 1, &channels, Mat(), disHist, 1, histSize, ranges, true, false);
    	Mat drawImage = Mat::zeros(Size(256, 256), CV_8SC3);//黑底的图像
    	//计算直方图后像素的最大个数
    	double g_dHistMaxValue;
    	minMaxLoc(disHist, 0, &g_dHistMaxValue, 0, 0);
    	for (int i = 0; i < 256; i++)  //遍历直方图数据
    	{
    		int value = cvRound(disHist.at<float>(i) * 256 * 0.9 / g_dHistMaxValue);
    
    		line(drawImage, Point(i, drawImage.rows - 1), Point(i, drawImage.rows - 1 - value), Scalar(255, 255, 255));
    		//参数   要绘制的线段的图像  线段的起点      线段的终点                               线段的颜色
    	}
    	 HI = drawImage.clone();
    }
    int main()
    {
    	Mat img = imread("lena.bmp");
    	imshow("Lena", img);
    	Mat mi;
    	int row = img.rows;
    	int col = img.cols;
    	//CON=i*i*P(I)
    	//计算i
    	mi.create(row, col, img.type());
    	for (int i = 0; i < row-1; i++)
    		for (int j = 0; j < col; j++)
    		{   
    			//cout << "BEF" << int(img.ptr<uchar>(i)[j]) << endl;
    			mi.at<Vec3b>(i, j) = img.at<Vec3b>(i + 1, j) - img.at<Vec3b>(i, j);
    			//cout << "IMF:" << int(mi.ptr<uchar>(i)[j]) << endl;
    		}
    	//计算p(I)  差值的概率
    	int new_cols = mi.cols;
    	int new_rows = mi.rows;
    	int gray[256] = { 0 };
    	double gray_prob[256] = { 0 };
    	int num = 0;// 像素的总个数
    	//统计直方图各个像素灰度值
    	for (int i = 0; i < mi.rows; i++)
    	{
    		uchar *p = mi.ptr<uchar>(i);
    		for (int j = 0; j < mi.cols; j++)
    		{
    			int value = p[j];
    			gray[value]++;
    			num++;
    		}
    	}
    	//计算直方图概率分布
    	for (int i = 0; i < 256; i++)
    	{
    		gray_prob[i] = ((double)gray[i] / num);
    	}
    	double CON = 0;
    	double ASM = 0;
    	double ENT = 0;
    	double MEAN = 0;
    	double v = 1.0/ 255.0;
    	for (int i = 0; i <= 255; i++)
    	{
    		CON += i*i*gray_prob[i];//计算CON
    		ASM += gray_prob[i] * gray_prob[i];//计算角度方向二阶矩
    		if (gray_prob[i]!=0)
    		ENT += (0-gray_prob[i] * log10(gray_prob[i]));//计算熵
    		MEAN += v*i*gray_prob[i];//计算平均值
    	}
    	Mat HI;
    	show_his(mi,HI);
    	imshow("差值i的直方图", HI);
    	cout << "灰度差分统计法求得的对比度为:" << CON << endl;
    	cout << "灰度差分统计法求得的角度方向二阶矩为" << ASM << endl;
    	cout << "灰度差分统计法求得的熵" << ENT << endl;
    	cout << "灰度差分统计法求得的平均值" << MEAN << endl;
    	waitKey(0);
    	return 0;
    }
    
    展开全文
  • 在人像美颜的拍照界面,往往由于光线和环境因素的影响,导致我们拍出的照片质量较,包括噪声多,曝光度过低等等问题,因此,大多数相机应用都会在Camera界面添加一定的图片预处理,比如自动亮度对比度调整,降噪,...

            在人像美颜的拍照界面,往往由于光线和环境因素的影响,导致我们拍出的照片质量较差,包括噪声多,曝光度过低等等问题,因此,大多数相机应用都会在Camera界面添加一定的图片预处理,比如自动亮度对比度调整,降噪,调色等等。今天我们要说的是自动亮度对比度和调色问题。

    对于自动亮度对比度的调节,主要分为了传统算法和基于深度学习的智能算法两类,我们先对目前算法做一个概述:

    传统算法: 

            传统的算法一般主要以视网膜增强算法(Retinex)、基于局部直方图信息的增强算法为主,对应的论文举例如下:

            视网膜增强算法举例:

            Multi-Scale Retinex for Color Image Enhancement

            A Multiscale Retinex for Bridging the Gap Between Color Images and the Human Observation of Scenes

            基于局部直方图信息增强算法举例:

            Real-Time Adaptive Contrast Enhancement

            除了上述两种方法思路之外,2012年微软研究院出了一篇个人认为效果还不错的论文:

            Automatic Exposure Correction of Consumer Photographs

            据说微软的“微软自拍app”用的就是这个算法,对应效果如下:

            传统算法对于这个问题的研究已经有几十年的时间,这期间积累了大量的论文资料,这里我们不在仔细说明,由于传统算法始终无法对各种情况和各种图像内容进行自动分析和自适应,因此,效果上依然存在很大问题。

    AI算法:

            基于深度学习的自动亮度对比度调节算法是近些年的热点,2019年最新的论文是腾讯的一篇论文:

            Underexposed Photo Enhancement using Deep Illumination Estimation

            论文的测试DEMO github地址:https://github.com/wangruixing/DeepUPE

            对应效果如下:

             论文参考了谷歌HDRNet中的部分原理,比如双边滤波网格部分等等,如下图所示:

             这篇论文效果很惊艳,但是目前为止,本人还没有跑通DEMO,实际测试中存在各种问题,github中也没有朋友复现出来,很可惜。

            上述总结,只是本人挑选的一部分内容所做的概述,下面来看本文重点内容。

            本文目的是图像自动亮度对比度和调色算法,我们给出两种可行思路:

            1,美图自动亮度对比度调节算法

              该算法来自美图秀秀专利信息,算法流程如下:

             ①根据直方图分布信息,将图像划分为以下几类:高光类,高光-中间调类,中间调类,中间调-阴影类,阴影类,高光-阴影类,直方图表示举例如下:

    阴影类                                                     高光-中间调类                                   高光类

     阴影-中间调类                                     高光-阴影类                                          中间调类

              ②准备样本数据集,人工将数据集按照①中六类标准划分类别;

              ③指定亮度对比度调节公式,如下所示:

               C=(100+contrast)/100, contrast范围[-100,100]

               brightness+=128

               cTable[i] = max(0,min(255,((i-128)*c+brightness+0.5)))

               对于灰度级Gray的像素,亮度对比度调节后的结果值为:cTable[Gray]

               ④使用③中公式,将样本集中的样本进行人工亮度对比度调节,默认调到人工视觉最佳为止,然后记录对应的亮度对比度数值,存入数据库中,至此完成数据样本准备工作;

               ⑤构建一个简单的CNN分类网络,输入任意一张图像,输出对应的分类标签,共6类,对应①中6种情况;

               ⑥使用CNN对数据样本进行训练,根据训练结果进行验证,并计算样本集种的误差,然后调节网络参数,调节数据集中被错分的图像亮度对比度数值并检测标签是否错分,再次训练,依次反复,知道精确度小于某个阈值为止;

               ⑦使用训练模型对任意一张输入照片进行分类,根据分类找到对应类别数据集,使用直方图相似性来寻找数据集中最相似的样本,并找到该样本对应的亮度对比度数值;

               ⑧根据亮度对比度数值对输入照片进行亮度对比度调节,得到最终效果图。

               上述过程就是美图的自动亮度对比度调节方案,理论上先分类,然后找到样本中直方图分布与其最接近的样本,按照样本的亮度对比度数值对输入照片进行调节,算法是可行的,而且,分类网络的速度是比较快的。由于样本问题,本人只进行了理论分析,给大家提供一种思路,当然,这种方法只能对图像进行亮度对比度调节,不能进行颜色调节。

                2,端到端网络训练

                本人使用了另一种方法,直接使用CNN对样本数据进行训练,得到最终的调节效果。本人使用Photo lemur3软件来得到样本数据,这个软件是国外一款基于深度学习算法开发的图像自动调节软件,可以对图像进行亮度对比度和调色处理。本人算法如下:

                ①使用Photolemur 3对300张样本进行处理,得到300张样本数据集,当然数据集比较少,这里仅做可行性测试;

                ②使用UNet网络对图像进行端到端的训练,使用adam优化器,mse loss,迭代500次,效果如图所示:

        Unet的网络模型如下:

    def unet(input_size = (256,256,3)):
        inputs = Input(input_size)
        conv1 = Conv2D(64, 3, activation = 'relu', padding = 'same', kernel_initializer = 'he_normal')(inputs)
        conv1 = Conv2D(64, 3, activation = 'relu', padding = 'same', kernel_initializer = 'he_normal')(conv1)
        pool1 = MaxPooling2D(pool_size=(2, 2))(conv1)
        conv2 = Conv2D(128, 3, activation = 'relu', padding = 'same', kernel_initializer = 'he_normal')(pool1)
        conv2 = Conv2D(128, 3, activation = 'relu', padding = 'same', kernel_initializer = 'he_normal')(conv2)
        pool2 = MaxPooling2D(pool_size=(2, 2))(conv2)
        conv3 = Conv2D(256, 3, activation = 'relu', padding = 'same', kernel_initializer = 'he_normal')(pool2)
        conv3 = Conv2D(256, 3, activation = 'relu', padding = 'same', kernel_initializer = 'he_normal')(conv3)
        pool3 = MaxPooling2D(pool_size=(2, 2))(conv3)
        conv4 = Conv2D(512, 3, activation = 'relu', padding = 'same', kernel_initializer = 'he_normal')(pool3)
        conv4 = Conv2D(512, 3, activation = 'relu', padding = 'same', kernel_initializer = 'he_normal')(conv4)
        drop4 = Dropout(0.5)(conv4)
        pool4 = MaxPooling2D(pool_size=(2, 2))(drop4)
    
        conv5 = Conv2D(1024, 3, activation = 'relu', padding = 'same', kernel_initializer = 'he_normal')(pool4)
        conv5 = Conv2D(1024, 3, activation = 'relu', padding = 'same', kernel_initializer = 'he_normal')(conv5)
        drop5 = Dropout(0.5)(conv5)
    
        up6 = Conv2D(512, 2, activation = 'relu', padding = 'same', kernel_initializer = 'he_normal')(UpSampling2D(size = (2,2))(drop5))
        merge6 = merge([drop4,up6], mode = 'concat', concat_axis = 3)
        conv6 = Conv2D(512, 3, activation = 'relu', padding = 'same', kernel_initializer = 'he_normal')(merge6)
        conv6 = Conv2D(512, 3, activation = 'relu', padding = 'same', kernel_initializer = 'he_normal')(conv6)
    
        up7 = Conv2D(256, 2, activation = 'relu', padding = 'same', kernel_initializer = 'he_normal')(UpSampling2D(size = (2,2))(conv6))
        merge7 = merge([conv3,up7], mode = 'concat', concat_axis = 3)
        conv7 = Conv2D(256, 3, activation = 'relu', padding = 'same', kernel_initializer = 'he_normal')(merge7)
        conv7 = Conv2D(256, 3, activation = 'relu', padding = 'same', kernel_initializer = 'he_normal')(conv7)
    
        up8 = Conv2D(128, 2, activation = 'relu', padding = 'same', kernel_initializer = 'he_normal')(UpSampling2D(size = (2,2))(conv7))
        merge8 = merge([conv2,up8], mode = 'concat', concat_axis = 3)
        conv8 = Conv2D(128, 3, activation = 'relu', padding = 'same', kernel_initializer = 'he_normal')(merge8)
        conv8 = Conv2D(128, 3, activation = 'relu', padding = 'same', kernel_initializer = 'he_normal')(conv8)
    
        up9 = Conv2D(64, 2, activation = 'relu', padding = 'same', kernel_initializer = 'he_normal')(UpSampling2D(size = (2,2))(conv8))
        merge9 = merge([conv1,up9], mode = 'concat', concat_axis = 3)
        conv9 = Conv2D(64, 3, activation = 'relu', padding = 'same', kernel_initializer = 'he_normal')(merge9)
        conv9 = Conv2D(64, 3, activation = 'relu', padding = 'same', kernel_initializer = 'he_normal')(conv9)
        conv9 = Conv2D(2, 3, activation = 'relu', padding = 'same', kernel_initializer = 'he_normal')(conv9)
    
        res = Conv2D(3, (1, 1), activation=None)(conv9)
        model = Model(input = inputs, output = res)
        #model.compile(optimizer = Adam(lr = 1e-4), loss = 'mse', metrics = ['accuracy'])
        return model

             上述方法思路比较简单,但是如果直接使用上述思路,虽然可以得到一定的效果,实时处理确实非常困难,正如HDRNet一样,也比较难以实时处理,尤其是不适用GPU的情况下实时处理。如何在CPU模式下,应用到camera实时预览中去,本人做了如下修改:

             ①优化网络模型,修改Unet,为了减少计算量和复杂度,可以减少通道数,减少网络层数,使用深度可分离卷积替代普通卷积等,最终本人的模型大小为9K,参数600多个,速度在PC端CPU模式下,使用MNN推理引擎,达到3ms,在终端android手机上测试可达到7.5ms,基本满足实时处理的需要,当然,图像大小为256×256;

              ②如何将256×256的小图效果转换为原图效果,这里我们可以直接输入原图来得到效果图,但是这种方式速度太慢,无法达到实时需求,因此,本人使用了颜色迁移算法,直接将小图颜色迁移到大图上,为此完成了此项工作。

            上述两种思路就是本文的内容,抛砖引玉吧!

     

     

    展开全文
  • 基于matlab,读取图像文件并,并计算其图像对比度。 计算公式采用:各中心像素灰度值与周围8近邻像素灰度值之差的平方之和再除以差的个数。 注:直接运行,选取路径即可输出计算结果,十分方便。适用于大量图片待...
  • 对比度明显的图片往往灰度分布均匀,常用图像灰度方差(标准)进行衡量,标准大则一般对比度明显,标准小则一般对比度不明显。 下面讲解图像处理中常用的加强对比度的方法。1.对数变换对数变换为什么管用,...

    图像处理中,对于原始图像(

    )一般需要将图片先转换为灰度图片(
    )进行处理。当一幅图片太亮或者太暗时,整一幅图片给人看上去感觉就是图片的特征不明显。

    对比度明显的图片往往灰度分布均匀,常用图像灰度方差(标准差)进行衡量,标准差大则一般对比度明显,标准差小则一般对比度不明显。

    下面讲解图像处理中常用的加强对比度的方法。

    1.对数变换

    对数变换为什么管用,我们想象一下对数函数的曲线形式

    ,在
    小的时候曲线变化大,而在
    大的时候曲线变化小,可以将灰度集中在低亮度区域变换成平分低亮度区到高亮度区,变化函数为:

    其中

    为输入图像的灰度值,
    为输出图像的灰度值,灰度值的范围为[0,255],但是变换后s的范围可能不在[0,255]之间,需要采用相关数学方法(实验时,采用最小最大值对
    值进行缩放)进行转换将
    的值转化到[0,255]之间。文中

    dbfffcb36eb5be24ad2b5ffbabfac588.png
    原图

    c4e5c3e5a1568323a6fe4e01a324346b.png
    对数函数转换后的图

    原图灰度均值、标准差:50.3768 46.1331

    转换后的均值、标准差:164.942 54.7216

    2.幂律变换

    幂律变换为什么管用,我们想象一下对数函数的曲线形式

    ,当
    的时候,在
    小的时候曲线变化小,而在
    大的时候曲线变化大,可以将灰度集中在高亮度区域变换成平分低亮度区到高亮度区,变化函数为:

    其中

    为输入图像的灰度值,
    为输出图像的灰度值,灰度值的范围为[0,255],但是变换后
    的范围可能不在[0,255]之间,需要采用相关数学方法(实验时,采用最小最大值对
    值进行缩放)进行转换将
    的值转化到[0,255]之间。文中

    edb21f77df699724518c585e93a95ba8.png
    原图

    63c189b7c6d66ca27cdd1bc55cc50e41.png
    幂律函数变换后的图

    原图灰度均值、标准差:200.146 52.5433

    转换后的均值、标准差:167.981 70.7997

    3.灰度直方图变换(累积分布函数变换-直方图均衡)

    灰度直方图的公式为:

    看公式,我们假设灰度集中在暗区(亮区),那么根据累加分布函数变化,可以将分布变换到整个0-255的区间中,那么相应的直方图灰度方差肯定也会变大。

    首先按照梯度值对原始图像的梯度分布进行统计,然后按照上述公式,按照四舍五入重新计算灰度值

    的范围是灰度直方图的统计的灰度值,
    的范围[0,255]。

    fdad1b78d891e8670d6299b676cc2f39.png
    原图

    b90bd4e21aaec79bc74f1bbbfada34a8.png
    直方图均衡变换后的图

    原图灰度均值、标准差:50.3768 46.1331

    转换后的均值、标准差:128.977 72.9586


    拿上面三种方法而言,实际中使用最多效果较好的是直方图均衡的方法。

    展开全文
  • 基于matlab,读取图像文件并,并计算其图像对比度。 计算公式采用:各中心像素灰度值与周围8近邻像素灰度值之差的平方之和再除以差的个数。 注:直接运行,选取路径即可输出计算结果,十分方便。适用于大量图片待...
  • 本文进行一下简单介绍,USM锐化一共分为三步,第一步生成原始图片src模糊图片和高对比度图片,记为blur和contrast.第二,把src和blur作,得到一张图片,记为diff,它就是下图UnsharpMask。然后把src和c

    常用Photoshop的玩家都知道Unsharp Mask(USM)锐化,它是一种增强图像边缘的锐化算法,原理在此处,如果你想使用这个算法,强烈推荐看一下。本文进行一下简单的介绍,USM锐化一共分为三步,第一步生成原始图片src的模糊图片和高对比度图片,记为blur和contrast.第二,把src和blur作差,得到一张差分图片,记为diff,它就是下图的UnsharpMask。然后把src和contras按一定的比例相加,这个比例由diff控制,最终得到锐化图片。USM有一个缺点,锐化后最大和最小的像素值会超过原始图片,如下图红色虚线和白色实线所示。

    代码如下:
    void MyTreasureBox::UnsharpMask(const IplImage* src, IplImage* dst, float amount, float radius, uchar threshold, int contrast)
    {
        if(!src)return ;
    
        int imagewidth = src->width;
        int imageheight = src->height;
        int channel = src->nChannels;
    
        IplImage* blurimage =    cvCreateImage(cvSize(imagewidth,imageheight), src->depth, channel);
        IplImage* DiffImage =    cvCreateImage(cvSize(imagewidth,imageheight), 8, channel);
    
        //原图的高对比度图像
        IplImage* highcontrast = cvCreateImage(cvSize(imagewidth,imageheight), 8, channel);
        AdjustContrast(src, highcontrast, contrast);
    
        //原图的模糊图像
        cvSmooth(src, blurimage, CV_GAUSSIAN, radius);
    
        //原图与模糊图作差
        for (int y=0; y<imageheight; y++)
        {
            for (int x=0; x<imagewidth; x++)
            {
                CvScalar ori = cvGet2D(src, y, x);
                CvScalar blur = cvGet2D(blurimage, y, x);
                CvScalar val;
                val.val[0] = abs(ori.val[0] - blur.val[0]);
                val.val[1] = abs(ori.val[1] - blur.val[1]);
                val.val[2] = abs(ori.val[2] - blur.val[2]);
    
                cvSet2D(DiffImage, y, x, val);
            }
        }
    
        //锐化
        for (int y=0; y<imageheight; y++)
        {
            for (int x=0; x<imagewidth; x++)
            {
                CvScalar hc = cvGet2D(highcontrast, y, x);
                CvScalar diff = cvGet2D(DiffImage, y, x);
                CvScalar ori = cvGet2D(src, y, x);
                CvScalar val;
    
                for (int k=0; k<channel; k++)
                {
                    if (diff.val[k] > threshold)
                    {
                        //最终图像 = 原始*(1-r) + 高对比*r
                        val.val[k] = ori.val[k] *(100-amount) + hc.val[k] *amount;
                        val.val[k] /= 100;
                    }
                    else
                    {
                        val.val[k] = ori.val[k];
                    }
                }
                cvSet2D(dst, y, x, val);
            }
        }
    
        cvReleaseImage(&blurimage);
        cvReleaseImage(&DiffImage);
    }
    其中用到一个调整图像对比度的函数
    void MyTreasureBox::AdjustContrast(const IplImage* src, IplImage* dst, int contrast)
    {
        if (!src)return ;


        int imagewidth = src->width;
        int imageheight = src->height;
        int channel = src->nChannels;


        //求原图均值
        CvScalar mean = {0,0,0,0};
        for (int y=0; y<imageheight; y++)
        {
            for (int x=0; x<imagewidth; x++)
            {                     
                CvScalar ori = cvGet2D(src, y, x);
                for (int k=0; k<channel; k++)
                {
                    mean.val[k] += ori.val[k];
                }         
            }
        }
        for (int k=0; k<channel; k++)
        {
            mean.val[k] /= imagewidth * imageheight;
        }


        //调整对比度
        if (contrast <= -255)    
        {
            //当增量等于-255时,是图像对比度的下端极限,此时,图像RGB各分量都等于阀值,图像呈全灰色,灰度图上只有1条线,即阀值灰度;
            for (int y=0; y<imageheight; y++)
            {
                for (int x=0; x<imagewidth; x++)
                {
                    cvSet2D(dst, y, x, mean);
                }
            }
        } 
        else if(contrast > -255 &&  contrast <= 0)
        {
            //(1)nRGB = RGB + (RGB - Threshold) * Contrast / 255
            // 当增量大于-255且小于0时,直接用上面的公式计算图像像素各分量
            //公式中,nRGB表示调整后的R、G、B分量,RGB表示原图R、G、B分量,Threshold为给定的阀值,Contrast为处理过的对比度增量。
            for (int y=0; y<imageheight; y++)
            {
                for (int x=0; x<imagewidth; x++)
                {
                    CvScalar nRGB;
                    CvScalar ori = cvGet2D(src, y, x);
                    for (int k=0; k<channel; k++)
                    {
                        nRGB.val[k] = ori.val[k] + (ori.val[k] - mean.val[k]) *contrast /255;
                    }
                    cvSet2D(dst, y, x, nRGB);
                }
            }
        }
        else if(contrast >0 && contrast <255)
        {
            //当增量大于0且小于255时,则先按下面公式(2)处理增量,然后再按上面公式(1)计算对比度:
            //(2)、nContrast = 255 * 255 / (255 - Contrast) - 255
            //公式中的nContrast为处理后的对比度增量,Contrast为给定的对比度增量。                


            CvScalar nRGB;
            int nContrast = 255 *255 /(255 - contrast) - 255;


            for (int y=0; y<imageheight; y++)
            {
                for (int x=0; x<imagewidth; x++)
                {
                    CvScalar ori = cvGet2D(src, y, x);
                    for (int k=0; k<channel; k++)
                    {
                        nRGB.val[k] = ori.val[k] + (ori.val[k] - mean.val[k]) *nContrast /255;
                    }
                    cvSet2D(dst, y, x, nRGB);
                }
            }
        }
        else
        {
            //当增量等于 255时,是图像对比度的上端极限,实际等于设置图像阀值,图像由最多八种颜色组成,灰度图上最多8条线,
            //即红、黄、绿、青、蓝、紫及黑与白;        
            for (int y=0; y<imageheight; y++)
            {
                for (int x=0; x<imagewidth; x++)
                {
                    CvScalar rgb;
                    CvScalar ori = cvGet2D(src, y, x);
                    for (int k=0; k<channel; k++)
                    {
                        if (ori.val[k] > mean.val[k])
                        {
                            rgb.val[k] = 255;
                        }
                        else
                        {
                            rgb.val[k] = 0;
                        }                    
                    }
                    cvSet2D(dst, y, x, rgb);
                }
            }
        }
    }
    展开全文
  • 本文进行一下简单介绍,USM锐化一共分为三步,第一步生成原始图片src模糊图片和高对比度图片,记为blur和contrast.第二,把src和blur作,得到一张图片,记为diff,它就是下图UnsharpMask。然后把src...
  • 作用1:线性混合可以用于去噪,假设噪声的产生符合均值为零、标准差的独立分布。多个高斯分布求平均值,即可去除噪声。 作用2:用于两张图片的切换。a从大到小变化,b从小到大变化。g就渐渐从f1变到f2。 OpenCV...
  • 计算两张图片的相似度图片结构相似度(SSIM)SSIM全称为structural similarity index,结构相似性,分别从亮度、对比度、结构三方面度量图像相似性。 均值作为亮度估计,标准作为对比度的估计,协方差作为结构...
  • matlab图片拼接

    2015-08-26 20:29:29
    图片自动拼接,将碎片上下边缘进行对比差的绝对值最小则匹配最高
  • PS通道抠图 通道抠图是主流的...2.调整色阶进一步增强对比度;3.将调整后的通道转换为选区。但是很多同学可能已经发现,按照这些教程的方法在大多情况下并不能有效地抠出令人满意的图片。那么问题出在哪里呢? 实际...
  •  其他调整包括:锐化、模糊、噪点、亮度、对比度、gamma调整、反色、去色、RGB色调调整等等  其他操作包括:任意缩放、自由旋转、裁剪  自动动作:可设置一系列动作,一按即自动完成所有操作  所有特效处理,...
  • 利用PS 调整 pdf清晰

    万次阅读 2017-02-16 23:24:41
    其实这一点点有时候只是图片的亮度对比度问题。这个完全可以做PS简单调节好。但是如果有很多照片要一次性处理。这个几个简单动作就会变很烦了。这个时候就要用一下PS批量处理功能。下面来为大家介绍一下:...
  • 这就是为什么渐变色图片、颜色值变化不大并且颜色单一的图片更容易压缩的原理。 分编码的目的,就是尽可能的将png图片数据值转换成一组重复的、低的值,这样的值更容易被压缩。 最后还要注意的是ÿ...
  • 项目上遇到一个问题,图片上的物体识别度较,尤其是在晚上的图片,画面模糊不清晰,则需要对太暗的图片需要单独提高画面亮度。解法分2步:先检测画面亮度,然后调节画面亮度与对比度。1、基于传统方式的图像质量...
  • 图像模糊判断方法--相机对焦使用

    千次阅读 2017-11-30 20:04:11
    在时域中,主要思路是考察图像领域对比度,即相邻像素间灰度特征梯度,梯度函数常被用来提取边缘信息,聚焦良好图像,具有更尖锐边缘,应有更大梯度函数值。 在频域中,主要思路是考察图像频率分量...
  • 链表存储密度要一些,但在容量分配上更灵活一些。从时间性能来看,查找运算与顺序存储相同,插入运算和删除运算时间复杂度为O(1),要更优于顺序存储,但读运算则弱一些,...
  • 可以自定义是否忽略透明(忽略则质量些,大小也将减小一半) OOM catch,避免Crash 可以清除缓存 压缩后拓展名不变 可以控制log输出 可以设置文件大小小于某个阈值原图不压缩直接返回原图路径 提供同步方法...
  • 图文讲解 Photoshop 曲线的用法 直线网 图片数量的增长从来不像现在这么迅猛 如果你是从一位经验丰富的摄影师手中 或是著名的图片公司得到图片 那么绝大多数时候都可放心使用 但是也有很多 时候拿到手的图片对比度很...
  • 1. 对比度对比度明显,目标与背景边界对比清晰,要求目标与背景灰度值至少相差30以上; 2. 均匀性:要求图片整体亮度均匀,或整体不均匀但灰度不影响图像处理; 3. 真实性:与颜色有关还需要颜色真实,亮度...
  • MR相比于CT,最大一个优势除了没有电离辐射,其中第二点就是软组织对比度高。特别是在神经系统成像中,头颅扫描中,MR图像灰白质对比度要明显优于CT图像。图1:MR-CT头颅图像融合如上图所示,同样位置扫描头颅...
  • 透射梯度优先,多分辨率在户外场景中拍摄的图片,由于大气散射的作用,不管是晴天还是雾天等各种恶劣天气情况下,所获取的自然场景图像会出现颜色清晰度不够和对比度差等现象,不利于图像中包含的信息提取,尤其对...
  • 该检测算法在对图像进行中值滤波和图像增强处理后,对图像实施多次像素模板提取和影运算,获取到对比度较低缺陷图,运用K-均值聚类方法对图像进行分割,从而较好地实现缺陷识别。运用Labview和IMAQ Vision...
  • 虽然之前也写过一篇持妆粉底的对比,但很多朋友还是有严重选择困难症,各家推广都说自家粉底好,到底该选哪家呢?今天特地再抓出3个来细说,他们算是...权利遮瑕其实也不但和DW比起来还是有细微差距,因为在...
  • CLAHE是一种对比度增强...对于对比度差的图片,通常的做法是 应用一个线性映射函数,如线性斜坡 非线性的方法:如Gamma 校正,和本文要讲的直方图均衡化 传统的直方图均衡化存在一些问题: 会突出一些噪声区域,...
  • 图像纹理特征学习

    万次阅读 热门讨论 2015-07-21 08:36:48
    一.灰度分统计法 设(x,y)为图像中一点,该点和它只有微小距离灰度差值为: ...用两张图片举一个例子:一张图片为墙面纹理图...分别计算这两张图片的平均值,对比度,熵。    wall.png
  • [Opencv 计算机视觉] 电路板尺寸测量–...然而图片噪点很多、对比度差导致边缘检测不到。用颜色区分,发现效果还挺好。 所以说,一种办法不行,还是另外再想其它方法吧。还有其它一些处理过程,在这里,github链接...
  • 大多通过这类软件转换生成pdf文件图像清晰、文字锐利,而且ppt文件中重要动画和过渡效果有可能全部消失。经过反复的对比测试,我认为此类软件中,迅捷ppt转换成pdf转换器当属佼佼者。  该软件支持文件...
  • filter 属性定义了元素可视效果 blur 给图像设置高斯模糊。"radius"一值设定高斯函数标准,或者是屏幕上以...t调整图像的对比度。值是0%话,图像会全黑。值是100%,图像不变。值可以超过100%,意味着会运用
  • 基于边缘检测车牌定位

    千次阅读 2018-02-16 19:56:07
    图像预处理是通过增加对比度以及形态学处理得到。想要得到理想效果需要多次重复操作。有很多不足之处,还请各位大神指教。直接上效果图 下面是matlab实现程序:close all;clc; I=imread('F...

空空如也

空空如也

1 2 3 4
收藏数 69
精华内容 27
关键字:

对比度差的图片