精华内容
下载资源
问答
  • delphi 图像亮度处理

    2018-09-19 19:57:33
    delphi 7 图像亮度处理 ,完成图片的亮度调整,程序无bug。
  • 主要介绍了C#图像亮度调整的方法,涉及C#操作图像亮度的相关技巧,需要的朋友可以参考下
  • 用Python对图像亮度进行调整,暗的图像调整到适宜的亮度,不需要设置阈值,根据灰度直方图对每张图自行调整。
  • 图像亮度调整 1.图像的直方图 一张图像一般由RGB三个通道(红色、绿色、蓝色三个部分)组成。单独对某个通道而言,把一幅图像中每一个像素出现的次数都统计出来,然后把每一个像素出现的次数除以总的像素个数,...

    文章结构

    文章主要目的是分享一种自动调节图像亮度的方法,在这篇文章内,你能了解到以下内容:

    • 图像的灰度直方图
    • 图像的亮度调整

    1.图像的直方图

    一张图像一般由RGB三个通道(红色、绿色、蓝色三个部分)组成。单独对某个通道而言,把一幅图像中每一个像素出现的次数都统计出来,然后把每一个像素出现的次数除以总的像素个数,得到的就是这个像素出现的频率,然后再把该像素出现的频率用图表示出来,就构成了灰度直方图。

    图像直方图由于其计算代价较小,且具有图像平移、旋转、缩放不变性等众多优点,广泛地应用于图像处理的各个领域,特别是灰度图像的阈值分割、基于颜色的图像检索以及图像分类。本文所述的图像亮度自适应调整方法就依赖于图像直方图的概念。

    用等会儿我们即将做亮度自适应增强的例子展示直方图效果:
    在这里插入图片描述
    在这里插入图片描述
    注:上述影像并非存黑色,为了展示,找了一张亮度较低的卫星影像做实例。直方图中的红绿蓝色线条分别代表rgb三个通道的灰度直方图。

    2.图像亮度自适应调整

    可以看到,三个通道的像素值大多分布在0到20之间,所以图像呈现极暗。图像的亮度也是与像素值挂钩,像素值越大,则一般而言,影像会越亮,那是不是对每个像素值加一定值就可以调整亮度呢?

    答案是否定的,若直接将像素值加上200,则结果图像会变白,但是地物依然无法识别,这是因为像素值之间的差别很小,可能像素值5代表的是灰色的屋顶,6代表的是绿色的草地,但是在像素值变大后变为205与206,看起来都是白色,所以无法展示实际影像。

    上述的是影像的亮度调整,所以还需要影像的对比度调整。

    影像的对比度指的是间隔,在调大像素值的同时增加像素值之间的间隔,则会得到较好的结果。

    先展示自适应调整后的结果:
    在这里插入图片描述
    下面讲解具体python实现。
    讲道理,先import库,读图片。

    import numpy as np
    import cv2
    
    
    def compute(img, min_percentile, max_percentile):
    	"""计算分位点,目的是去掉图1的直方图两头的异常情况"""
        max_percentile_pixel = np.percentile(img, max_percentile)
        min_percentile_pixel = np.percentile(img, min_percentile)
    
        return max_percentile_pixel, min_percentile_pixel
    
    
    def aug(src):
    	"""图像亮度增强"""
    	if get_lightness(src)>130:
    		print("图片亮度足够,不做增强")
    	# 先计算分位点,去掉像素值中少数异常值,这个分位点可以自己配置。
    	# 比如1中直方图的红色在0到255上都有值,但是实际上像素值主要在0到20内。
        max_percentile_pixel, min_percentile_pixel = compute(src, 1, 99)
        
        # 去掉分位值区间之外的值
        src[src>=max_percentile_pixel] = max_percentile_pixel
        src[src<=min_percentile_pixel] = min_percentile_pixel
    
    	# 将分位值区间拉伸到0到255,这里取了255*0.1与255*0.9是因为可能会出现像素值溢出的情况,所以最好不要设置为0到255。
        out = np.zeros(src.shape, src.dtype)
        cv2.normalize(src, out, 255*0.1,255*0.9,cv2.NORM_MINMAX)
    
        return out
    
    def get_lightness(src):
    	# 计算亮度
        hsv_image = cv2.cvtColor(src, cv2.COLOR_BGR2HSV)
        lightness = hsv_image[:,:,2].mean()
        
        return  lightness
    
    img = cv2.imread(r"data/test.png")
    img = aug(img)
    cv2.imwrite('out.png', img)
    
    展开全文
  • 介绍了两种RGBW排列结构的子像素着色算法,既保证了与传统RGB传统排列一样的分辨率,又提高了图像的亮度。图像处理过程包含两个算法:RGB到RGBW的转化...仿真结果表明,所提出的RGBW排列及着色算法可明显提高图像亮度
  • 图像亮度调整

    2018-01-29 21:19:00
    在RGB色彩空间进行亮度图像亮度调整的方法步骤: 1)计算像素在R、G、B三个分量上的平均值 2)对三个平均值分别乘以对应的亮度系数brightness,默认为1则表示亮度不变,大于1表示亮度提高,小于1表示亮度变暗 3)...

    在RGB色彩空间进行亮度图像亮度调整的方法步骤:

    1)计算像素在R、G、B三个分量上的平均值

    2)对三个平均值分别乘以对应的亮度系数brightness,默认为1则表示亮度不变,大于1 表示亮度提高,小于1 表示亮度变暗

    3)对每个像素值在R、G、B上的分量,首先减去第一步计算出来的平均值,然后再加上第二步的计算结果。

    Pnew = Pold +(brightness -1 )*means

    Pnew 处理之后的像素,Pold 处理之前的像素,brightness 亮度系数(取值范围为【0~3】),means图像像素的平均值

    代码如下:

    package chapter4;

    import java.awt.image.BufferedImage;

    /**
    * Created by LENOVO on 18-1-29.
    */
    public class BrightFilter extends AbstractBufferedImageOp {
    private float brightness = 1.2f;//定义亮度系数
    public BrightFilter(){
    //this(1.2f);
    }
    public BrightFilter(float brightness){
    this.brightness = brightness;
    }
    public float getBrightness() {
    return brightness;
    }

    public void setBrightness(float brightness) {
    this.brightness = brightness;
    }
    public BufferedImage filter(BufferedImage src,BufferedImage dest){
    int width = src.getWidth();
    int height = src.getHeight();
    if(dest == null){
    dest = creatCompatibleDestImage(src,null);
    }
    int[] inpixels = new int[width*height];
    int[] outpixels = new int[width*height];
    getRGB(src,0,0,width,height,inpixels);

    int index = 0;
    int[] rgbmeans = new int[3];
    double redSum = 0;double greenSum = 0;double blueSum = 0;
    double total = width*height;
    for(int row=0;row<height;row++){
    int ta = 0,tr = 0,tg = 0,tb = 0;
    for(int col=0;col<width;col++){
    index = row*width+col;
    ta = (inpixels[index] >> 24) & 0xff;
    tr = (inpixels[index] >> 16) & 0xff;
    tg = (inpixels[index] >> 8) & 0xff;
    tb = inpixels[index] & 0xff;

    redSum += tr;
    greenSum += tg;
    blueSum += tb;
    }
    }
    //1、计算RGB各分量平均值
    rgbmeans[0] = (int)(redSum/total);
    rgbmeans[1] = (int)(greenSum/total);
    rgbmeans[2] = (int)(blueSum/total);

    for(int row=0;row<height;row++){
    int ta = 0,tr = 0,tg = 0,tb = 0;
    for(int col=0;col<width;col++){
    index = row*width+col;
    ta = (inpixels[index] >> 24) & 0xff;
    tr = (inpixels[index] >> 16) & 0xff;
    tg = (inpixels[index] >> 8) & 0xff;
    tb = inpixels[index] & 0xff;

    //2、减去平均值
    tr -= rgbmeans[0];
    tg -= rgbmeans[1];
    tb -= rgbmeans[2];

    //3、加上平均值乘以亮度系数的值
    tr += rgbmeans[0]*brightness;
    tg += rgbmeans[1]*brightness;
    tb += rgbmeans[2]*brightness;

    outpixels[index] = (ta << 24) | (clamp(tr) << 16 ) | (clamp(tg) << 8) | clamp(tb);
    }
    }
    setRGB(dest,0,0,width,height,outpixels);
    return dest;
    }
    public int clamp(int value){
    return value>255 ? 255:((value<0) ? 0:value);
    }
    }

    测试代码同上

    转载于:https://www.cnblogs.com/bigdream6/p/8378343.html

    展开全文
  • 图像处理之图像亮度调节

    万次阅读 2017-05-07 17:13:49
    图像处理中,图像亮度调节可能是最简单的算法了,非常常见的线性运算即可完成亮度调节,比如所有像素点亮度值乘或者加一个增强系数,使得图像整体变亮或者变暗。photoshop中是如何实现的不得而知,每个版本可能也不...

           图像处理中,图像亮度调节可能是最简单的算法了,非常常见的线性运算即可完成亮度调节,比如所有像素点亮度值乘或者加一个增强系数,使得图像整体变亮或者变暗。看过一些相关开源代码,常见的操作是乘以一个亮度调节系数。但是,这样做很容易使图像出现过饱和现象,即亮度值超出255。photoshop中是如何实现的不得而知,每个版本可能也不一样。还是说说我的实现方法,其实就是在调节过程中,根据像素点亮度,做非线性调节,即高光、阴影部分调节小一点,中间部分多调节一些,这样亮度调节看着更自然一些。下面是示例代码:

    void ImageBrightness(BMPINFO *pSrcBitmap, float strength)
    {
    	int brightness = (int)(strength*100);
    	uchar lookupTable[256];
    	for (int i = 0; i < 256; i++)
    	{
    		lookupTable[i] = (uchar)MIN(255, MAX(0, i + sin(FILTER_PI*i / 255.0f)*brightness));
    	}
    
    	int size = pSrcBitmap->lWidth*pSrcBitmap->lHeight;
    	uchar* pSrcData = pSrcBitmap->pPlane[0];
    	for (int i = 0; i < size; i++, pSrcData+=4)
    	{
    		pSrcData[AXJ_BLUE] = lookupTable[pSrcData[AXJ_BLUE]];
    		pSrcData[AXJ_GREEN] = lookupTable[pSrcData[AXJ_GREEN]];
    		pSrcData[AXJ_RED] = lookupTable[pSrcData[AXJ_RED]];
    	}
    }

           亮度调节示例图片,上面为原图,下面为结果图。

                  

                  




    展开全文
  • 图像亮度变换

    千次阅读 2013-11-19 21:03:00
    如何进行图像GAMMA值调节,我们可以参考Matlab中函数imadjust.m理解其原理,然后,使用OpenCV实现与函数imadjust一样功能,进行图像亮度变换实现。亮度变换的原理可以参考Matlab中函数imadjust.m.首先,在imadjust中...

    引言

    图像处理中,亮度变换指图像在空域上的点运算,通常包括图像增强,亮度/对比度调节,GAMMA值调节各直方图调整等。如何进行图像GAMMA值调节,我们可以参考Matlab中函数imadjust.m理解其原理,然后,使用OpenCV实现与函数imadjust一样功能,进行图像亮度变换实现。

    基本理论

    亮度变换的原理可以参考Matlab中函数imadjust.m.首先,在imadjust中,参数gamma指明了由f 映射生成图像g 时曲线的形状。如果gamma的值小于1,映射被加权至较高(较亮)的输出值,如图3.2(a)所示。如果gamma的值大于1,映射被加权至较低(较暗)的输出值,如图3.2(c)所示。如果省略函数参量,gamma默认为1(线性映射),如图3.2(b)所示。



    imadjust函数和函数解析,如下所示:

    =======(此内容来源于http://www.mathworks.cn/cn/help/images/ref/imadjust.html)=======

    J = imadjust (I)
    J = imadjust (I,[low_in;high_in])
    J = imadjust (I,[low_in;high_in],[low_out;high_out])
    J = imadjust (..., gamma)
    newmap = imadjust (map, ...)
    RGB_out = imadjust (RGB, ...)
    Adjust image or colormap values to a specified range

    J=imadjust(I) adjusts intensity imageI values so that 1% of data on lower and higher values (2% in total) of the image is saturated; choosing for that the corresponding lower and higher bounds (using stretchlim) and mapping them to 0 and 1. J is an image of the same size asI which contains mapped values. This is equivalent toimadjust(I,stretchlim(I)).

    J=imadjust(I,[low_in;high_in]) behaves as described butuses low_in andhigh_in values instead of calculating them. It maps those values to 0 and 1; saturates values lower than first limit to 0 and values higher than second to 1; and finally maps all values between limits linearly to a value between 0 and 1. If[] is passes as[low_in;high_in] value, then[0;1] is taken as a default value.

    J=imadjust(I,[low_in;high_in],[low_out;high_out]) behaves as described butmaps output values betweenlow_out and high_out instead of 0 and 1. A default value[] can also be used for this parameter, which is taken as[0;1].

    J=imadjust(...,gamma) takes, in addition of 3 parameters explained above, an extra parametergamma, which specifies the shape of the mapping curve between input elements and output elements, which is linear (as taken if this parameter is omitted). If gamma is above 1, then function is weighted towards lower values, and if below 1, towards higher values.

    newmap=imadjust(map,...) applies a transformation to a color mapmap, which output isnew map. This transformation is the same as explained above, just using a map instead of an image.low_in,high_in,low_out,high_out and gamma can be scalars, in which case the same values are applied for all three color components of a map; or it can be 1-by-3vectors, to define unique mappings for each component.

    RGB_out=imadjust(RGB,...) adjust RGB imageRGB (aM-by-N-by-3 array) the same way as specified in images and color maps. Here too low_in,high_in,low_out,high_out and gamma can be scalars or 1-by-3 matrices, to specify the same mapping for all planes, or unique mappings for each.

    The formula used to realize the mapping (if we omit saturation) is:

    J = low_out +(high_out - low_out).* ((I - low_in)/(high_in - low_in)).^ gamma
    Compatibility notes:

    • Prior versions of imadjust allowed [low_in; high_in] and[low_out; high_out] to be row vectors. Compatibility with this behaviour has been keeped, although preferred form is vertical vector(since it extends nicely to 2-by-3 matrices for RGB images and colormaps).
    • Previous version of imadjust, if low_in>high_in it "negated" output. Now it is negated iflow_out>high_out, for compatibility withMATLAB.
    • Class of I is not considered, so limit values are not modified depending on class of the image, just treated "as is". When Octave 2.1.58 is out, limits will be multiplied by 255 for uint8images and by 65535 for uint16 as in MATLAB.
    =======================================================================================

    通过上述对imadjust函数解析,可以理解为:图像的亮度和对比度调节就是一种亮度变换,可以通过直接调整[low_in,high_in]和[low_out,high_out]的数值来实现亮度以及对比度

    在Matlab上使用imadjust实现图像亮度变换比较简单,参考代码和输出结果效果所示:

    I = imread('test.jpg');
    J = imadjust(I,[0,0.5],[0.5,1]);
    imshow(I);
    figure,imshow(J);
    输出结果

       

    (a)源始图像     (b)用MATLAB中函数imadjust得到的图像亮度变换

    现在,在OpenCV中,定义ImageAdjust函数来实现图像亮度变换功能,其中参数:src为原始图像输入;dst为输出图像。low_in,high_in,low_out,high_out与Matlob中imadjust函数的参数是相似的。贴出此函数代码,仅作参考。

    参考代码

    IplImage* ImageTrans::ImageAdjust(IplImage *src, IplImage *dst,
              double low_in, double high_in,
              double low_out, double high_out, double gamma )
    {
        double low2 = low_in*255;
        double high2 = high_in*255;
        double bottom2 = low_out*255;
        double top2 = high_out*255;
        double err_in = high2 - low2;
        double err_out = top2 - bottom2;
    
        int x,y;
        double val0,val1,val2;
    
        // intensity transform
        for( y = 0; y < src->height; y++) {
            for (x = 0; x < src->width; x++){
                val0 = ((uchar*)(src->imageData+src->widthStep*y))[x*src->nChannels]; 
                val0 = pow((val0 - low2)/err_in,gamma)*err_out+bottom2;
                if(val0>255) val0=255; 
    	    if(val0<0) val0=0; 
    	    ((uchar*)(dst->imageData+dst->widthStep*y))[x*src->nChannels]=(uchar)val0;
    
    	    val1 = ((uchar*)(src->imageData+src->widthStep*y))[x*src->nChannels+1]; 
                val1 = pow((val1- low2)/err_in, gamma)*err_out+bottom2;
                if(val1>255) val1=255; 
                if(val1<0) val1=0;
    	    ((uchar*)(dst->imageData+dst->widthStep*y))[x*src->nChannels+1]=(uchar)val1;
    
    	    val2 = ((uchar*)(src->imageData + src->widthStep*y))[x*src->nChannels+2]; 
                val2 = pow((val1-low2)/err_in,gamma)*err_out+bottom2;
                if(val2>255) val2=255; 
    	    if(val2<0) val2=0; // Make sure src is in the range [low,high]
    	    ((uchar*)(dst->imageData+dst->widthStep*y))[x*src->nChannels+2]=(uchar)val2;
            }
        }
        return 0;
    }
    
    测试输出结果效果:


    (a)源始图像     (b)用程序ImageAdjust得到的图像亮度变换


    (c)源始图像    (d)用程序ImageAdjust得到的图像亮度变换


    关于Image Engineering & Computer Vision的更多讨论与交流,敬请关注本博和新浪微博songzi_tea.


    展开全文
  • 眼底图像预处理-图像亮度增强

    千次阅读 2019-09-22 16:03:46
    数据库中大量的眼底图像亮度不均,明暗分布不一致,在预处理过程中,需要进行亮度校正。 在HSV 颜色空间中V分量直接反映亮度信息,因此通过HSV 对亮度进行校正。 用两种方法进行校正,参数value在-1~1之间,value...
  • 此代码是有关于图像亮度配准的算法,根据两幅图的明度、对比度,进行两图像的亮度配准。
  • opencv调整图像亮度和对比度详解,包括亮度和对比度概念,改变亮度和对比度,像素值转化等,欢迎下载学习。
  • 图像亮度校正方法

    2019-12-06 17:28:37
    人脸图像亮度校正 import os import cv2 import math import numpy as np class FaceEnhance(): """MobileFace enhance for dark or bright face. """ def __init__(self, **kwargs): super(MobileF...
  • Python中计算图像亮度

    千次阅读 2020-07-22 11:26:38
    Python中计算图像亮度的方法 PS:转载+翻译(有侵权告诉我,立马删除),为了自己记录; 以下几个方法每个方法都返回一个相近值,但与其他方法不完全相同。另外,除了最后一个方法,所有方法的运行速度都差不多,...
  • OPENCV统计比较图像亮度

    千次阅读 2016-08-01 15:36:54
    OPEN统计比较图像亮度int main()
  • 本文通过实例代码给大家介绍了opencv调整图像亮度对比度,代码简单易懂,非常不错,具有一定的参考借鉴价值,需要的朋友可以参考下
  • 调整图像亮度和对比度-conratio2.m 可以实时调整图像对比度和亮度,对图像处理应该有帮助
  • 调整图像亮度与对比度
  • 本文将介绍数字图像处理中两个基本内容---图像亮度对比度,详细讲解两种基本的亮度对比度调节算法,并使用C语言进行算法实现,在教会初学者算法的同时,不依赖任何第三方库编程实现,学以致用且易学易用。
  • 图像亮度增强,采用各种非线性函数变换,包括幂函数、指数函数、对数函数等等,以及直方图均衡化方法。
  • 提出一个基于改进的Itti-Koch模型的感兴趣区域(Region of interest,ROI)提取算法,同时针对图像亮度特征对ROI提取的影响问题,从2个方面进行分析研究:一是根据不同亮度权重下提取的ROI,分析亮度特征对ROI提取的...
  • 图像亮度 以灰度图像为例,图像亮度指的是图像的明暗程度,图像的像素值整体越接近于255,图像越亮,反之越接近于0,图像越暗。 图像对比度 假设灰度图像的像素值的范围为[a,b],如果b-a的值越接近于255,图像...
  • VC++改变图像亮度实例

    2021-03-15 18:25:56
    内容索引:VC/C++源码,图形处理,图像处理 VC++编程实现改变BMP图像亮度,可以使BMP的亮度依次增加或降低,不过程序好像效果不是太好,如果处理步骤过多的话,图像很容易失真,要求不高的时候可以借鉴一下。
  • 这里写目录标题图像变换调整图像亮度、对比度原理相关API代码演示效果 图像变换 像素变换——点操作 领域操作——区域操作 领域操作多用于卷积,特征提取、图像梯度计算、更深度的一些匹配识别等、角点检测、模糊、...
  • 图像亮度变换函数

    千次阅读 2015-06-04 21:17:39
    //图像亮度变换函数 //函数将fLowSrc到fHighSrc之间的亮度根据fGamma的值映射到fLowDst到fHighDst亮度中 //fLowSrc,fHighSrc,fLowDst,fHighDst均在0-1之间,函数会根据源图像类型按比例映射 void ImageAdjust...
  • Win8Metro(C#)数字图像处理--2.5图像亮度调整 原文:Win8Metro(C#)数字图像处理--2.5图像亮度调整  2.5图像亮度调整函数 [函数名称] 图像亮度调整函数Bright...
  • 基于贝尔图像亮度的新插值方法,王红卫,程永强,大多数码相机通过彩色滤镜阵列获取图像,即贝尔图像。每个像素只能得到一个颜色值,而另外两种颜色值需要插值得到。基于两个重要
  • 在基于帧差分的智能视频监控系统中,图像亮度改变对目标物体的识别和跟踪可能造成严重影响。通过对比一些常用亮度校正方法,选用比例变换法进行深入研究。为保证校正效果,预先指定一个不受目标物体影响的区域,根据其...
  • 图像亮度调整源代码

    2008-05-31 16:18:14
    图像亮度调整源代码,希望都大家有用

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 9,903
精华内容 3,961
关键字:

图像亮度