精华内容
下载资源
问答
  • 图像对比度增强

    2021-05-24 16:57:04
    图像对比度增强 1. 线性变换 通过y=ax+b对灰度值进行处理,例如对于过暗的图片,其灰度分布在[0,100], 选择a=2,b=10能将灰度范围拉伸到[10, 210]。 需要根据情况设置a和b的值。 cv2.convertScaleAbs(img,alpha=1.5,...

    图像对比度增强

    1. 线性变换

    通过y=ax+b对灰度值进行处理,例如对于过暗的图片,其灰度分布在[0,100], 选择a=2,b=10能将灰度范围拉伸到[10, 210]。
    需要根据情况设置a和b的值。

    cv2.convertScaleAbs(img,alpha=1.5,beta=0)
    

    2. 直方图正规化

    自动计算y=ax+b中的a和b,实际上就是将图像从[min, max]映射到[0, 255]:
    在这里插入图片描述

    cv2.normalize(img,dst=None,alpha=350,beta=10,norm_type=cv2.NORM_MINMAX)
    

    3. 伽马变换

    将输入图像的像素值除以255,归一化到[0,1]区间,然后计算其γ次方值,当γ=1时原像素值不影响,当0<γ<1时,增大像素值,提高图片对比度;反之γ>1时能降低图片对比度。
    在这里插入图片描述

    def gamma(img, v):
        img_norm = img / 255.0
        img_gamma = np.power(img_norm, v) * 255.0
        img_gamma = img_gamma.astype(np.uint8)
        return img_gamma
    

    4. 直方图均衡化

    灰度

    将原图片每个像素值的像素点个数进行重新分配到[0,255]的256个像素值上,使得每个像素值对应的像素点个数近似相等,即重新分配后,0-255的每个像素值对应的像素点个数近似为(rows*cols/256)
    只能处理单通道数据。

    cv2.equalizeHist(img)
    

    彩色

    将某一个通道的像素分布进行均衡化

    def hisEqulColor(img):
        ycrcb = cv2.cvtColor(img, cv2.COLOR_BGR2YCR_CB)
        channels = cv2.split(ycrcb)
        cv2.equalizeHist(channels[0], channels[0]) #Y单通道
        cv2.merge(channels, ycrcb)
        cv2.cvtColor(ycrcb, cv2.COLOR_YCR_CB2BGR, img)
        return img
    

    效果:

    在这里插入图片描述

    展开全文
  • 通过直方图均衡技术(RMSHE、ClaHE 等)增强图像对比度
  • matlab开发-BrightnessPreservationBasedOnDynamicStretching的图像对比度增强。基于动态拉伸的图像对比度增强亮度保持
  • matlab开发-彩色图像对比度增强。这个程序演示了色彩空间中对比度增强的概念。
  • 为实现室外模糊红外图像对比度增强,提出一种基于去雾模型的红外图像增强方法。结合红外图像特点,对可见光去雾增强方法进行改进优化。采用三级高斯金字塔分解扩展实现图像快速均值滤波,获取透射率粗估计;通过图像...
  • 基于PCNN和视觉特性的图像对比度增强
  • 用c++实现图像对比度增强,通过点算子函数来增强图像对比度,参考书上的函数,自己写的代码
  • 针对这一问题,提出一种X 射线图像对比度增强的算法。该算法以同态滤波为核心,结合图像降噪预处理及灰度调整,以现图像的对比度增强,并提高图像质量。编写程序实现该算法,并通过对分辨率靶图像和海洋鱼类样品的X ...
  • 图像对比度增强算法

    万次阅读 多人点赞 2017-01-17 17:53:19
    论述了几种基于灰度直方图的图像对比度增强算法。

    一、全局对比度增强1

    1. 直方图均衡化 Histogram Equalization

    a. 基本思想

    对于图像中的灰度点做映射,使得整体图像的灰度大致符合均匀分布。增强图像的对比度。
    - 对于灰度值连续的情况,使用灰度的累积分布函数CDF做转换函数,可以使得输出图像的灰度符合均匀分布。
    - 对于灰度值不连续的情况,存在舍入误差,得到的灰度分布大致符合均匀分布。
    - 直观地理解,如果某一个灰度范围(如200-201)的像素点很少,那么它的概率密度值就会很小,所以CDF在200-201附近的增长变化就会很小;反之,如果某一个灰度范围(如100-101)的像素点很多,CDF在100-101附近的增长变化会很大。总体来看,以灰度为横轴,CDF为纵轴画曲线。这种向上凸的曲线,很像gamma变换: s=crγγ<1的情形。将灰度集中的部分拉伸,而将灰度不集中的部分压缩,达到提高对比度的效果。
    - 直方图均衡可以看做自适应的gamma变换或者分段变换。前者的优势在于,不需要指定任何参数,所有运算都是基于图像本身的。

    b. 算法
    1. 根据图像灰度计算灰度概率密度函数PDF
    2. 计算累积概率分布函数CDF
    3. CDF归一化到原图灰度取值范围,如[0,255]。
    4. 之后CDF四舍五入取整,得到灰度转换函数sk=T(rk)
    5. CDF作为转换函数,将灰度为rk的点转换为sk灰度
    c. matlab实验

    代码2

    %% 直方图均衡
    clear all;clc;close all;
    ImgFile='E:\图像处理\冈萨雷斯图片库\DIP3E_Original_Images_CH03\Fig0310(b)(washed_out_pollen_image).tif';
    ImgIn=imread(ImgFile);
    ImgHistEq=histeq(ImgIn,256);
    figure;subplot(121);imshow(uint8(ImgIn));title('原图');
    subplot(122);imshow(ImgHistEq);title('全局灰度增强 - 直方图均衡');
    figure;subplot(121);imhist(ImgIn,256);
    axis([0 255 0 1e5]);title('原图的直方图');
    subplot(122);imhist(ImgHistEq,256);axis([0 255 0 1e5]);title('直方图均衡化后的直方图');
    % 自定义直方图均衡
    [counts,x]=imhist(ImgIn,256);
    cum_counts=cumsum(counts);
    cum_counts=uint8(cum_counts/max(cum_counts)*255);% 转化函数
    figure;plot(x,cum_counts);axis([0 255 0 255]);
    xlabel('原图灰度');ylabel('转换后灰度');title('原图CDF转化的灰度映射函数');
    ImgOut=nan(size(ImgIn));
    for i=1:length(x)
        ImgOut(ImgIn==x(i))=cum_counts(i);
    end
    ImgOut=uint8(ImgOut);
    figure;imshow(uint8(ImgOut));title('自定义直方图均衡')
    figure;imhist(ImgOut,256);axis([0 255 0 1e5]);title('自定义直方图均衡的直方图')

    输出:
    原图和均衡化后的图
    图1. 原图和均衡化后的图。均衡后图像对比度明显增强,纹理和边缘更加清晰。

    原图和均衡化后的图的直方图
    图2. 原图和均衡化后的图的直方图。原图灰度分布在很狭窄的区间约[90,140]内。均衡化后灰度较为均匀的分布在整个[0, 255]区间内。

    cdf
    图3. 原图CDF归一化到[0, 255]后作为灰度变换函数。为了方便显示,画成连续曲线。

    自定义均衡的直方图
    图4. 自定义均衡的直方图。和Matlab自带histeq输出基本一致。

    2. 直方图匹配 Histogram Matching

    a. 基本思想

    我的理解:

    对于图像中的灰度点做映射,使得整体图像的灰度大致符合给定的分布。
    想要图像的直方图Hs和期望直方图Hd相同, 那么二者的CDF也是相同的.
    也就是说, 对于某一个灰度x, CDFs(x)=CDFd(x). 所以, 如果CDFs(x)=CDFd(y). 那么我们令x=y.
    也就是将原图的x灰度映射为y灰度. 相当于将图像直方图的横轴做了一个点对点的缩放操作.
    这个缩放操作的结果就是图像直方图向理想直方图靠近.
    在缩放过程中, 如果图像的直方图某一段灰度区间被拉长了, 因为灰度都是整数, 所以直方图的bin会变得稀疏.
    所以,
    最终的直方图匹配的结果就是直方图的bin变得稀疏了. 有的灰度区间没有灰度点.

    • 对于某些图像,灰度分布过于不均衡,例如背景很大且均匀。直接做直方图均衡会把前景“洗白”,效果很差。
    • 直方图匹配需要设定一个直方图分布。不同的图像,此分布可能不同。
    b. 算法
    1. 根据图像计算概率密度分布pr(r)
    2. 根据pr(r)计算累计分布函数sk=T(rk)
    3. 根据给定的目标分布pz(z)计算累计分布函数G(zq)
    4. 对于每一个k,找到一个q,使得G(zq)约等于sk
    5. 将原图中灰度为k的点变为灰度q
    c. Matlab实验
    clear all;clc;close all;
    ImgFile='E:\图像处理\冈萨雷斯图片库\DIP3E_Original_Images_CH03\Fig0323(a)(mars_moon_phobos).tif';
    ImgIn=imread(ImgFile);
    figure;subplot(121);imshow(ImgIn);title('原图')
    subplot(122);imhist(ImgIn);title('原图Hist')
    % histeq
    ImgHistEq=histeq(ImgIn);
    figure;subplot(121);imshow(ImgHistEq);title('Hist EQ');
    subplot(122);imhist(ImgHistEq,256);title('Hist EQ')
    % 根据3.35(a)估计的分布
    x=[0 8 16 180 200 255];
    Y=[0 70000 8000 0 3139 0];
    xi=0:255;
    yi = interp1q(x',Y',xi');
    figure;plot(xi,yi,'.');title('目标 Hist')
    ImgHistMatch = histeq(ImgIn, yi);
    figure;subplot(121);imshow(ImgHistMatch);title('histeq匹配')
    subplot(122);imhist(ImgHistMatch,256);title('histeq匹配直方图')

    输出:
    这里写图片描述
    图5. 原图和直方图

    这里写图片描述
    图6. 直方图均衡后图像及直方图

    这里写图片描述
    图7. 目标直方图

    这里写图片描述
    图8. 直方图匹配图像和直方图

    自定义直方图匹配

    %% 自定义匹配
    clear all;clc;close all;
    ImgFile='E:\图像处理\冈萨雷斯图片库\DIP3E_Original_Images_CH03\Fig0323(a)(mars_moon_phobos).tif';
    ImgIn=imread(ImgFile);
    x=[0 8 16 180 200 255];
    Y=[0 70000 8000 0 3139 0];
    xi=0:255;
    yi = interp1q(x',Y',xi');
    [counts, x]=imhist(ImgIn,256);
    cum_counts=cumsum(counts);% 累加CDF
    % 归一化到[0 255]
    cum_counts=cum_counts./numel(ImgIn);
    s_k=round(cum_counts*255);
    cum_yi=cumsum(yi);% 目标累加CDF
    g_z=round(cum_yi./sum(yi)*255); 
    figure;plot(s_k,'r');hold on;plot(g_z,'g');grid on;hold off;
    legend('s_k','g_z')
    axis([0 255 0 255]);title('原图累计CDF 和 目标累计CDF')
    map=nan(size(s_k));
    for k=1:length(s_k)
        delta=abs(g_z-s_k(k));
        [~,z]=min(delta);
        map(k)=z;
    end
    figure;plot(0:255,map);axis([0 255 0 255]);grid on;
    xlabel('输入灰度');ylabel('输出灰度');title('灰度映射曲线')
    
    ImgOut=zeros(size(ImgIn));
    for m=0:length(map)-1
        ImgOut(ImgIn==m)=map(m+1);
    end
    ImgOut=uint8(ImgOut);
    figure;imshow(ImgOut);title('直方图匹配')
    figure;imhist(ImgOut,256);title('直方图匹配');

    输出:只列出转换函数
    这里写图片描述
    转换函数映射图

    二、局部对比度增强

    1. 邻域直方图均衡

    将全局直方图均衡的思想应用于邻域直方图处理中。

    2. 邻域直方图匹配

    将全局直方图匹配的思想应用于邻域直方图处理中。

    3. 邻域统计方法

    a. 基本思想

    对于一幅图像,灰度的均值MG表示平均光照,灰度的方差(或标准差)σG表示对比度的强弱。
    对于图像某一个像素,邻域的灰度均值ML表征邻域光照强度,邻域的方差或者标准差σL表示邻域对比度的强弱。
    根据MLσL的大小自主选择想要增强的点做增强(例如乘以某一个常数E)。

    b. 算法
    1. 初始化:增强常数E,灰度下阈值k0,标准差下阈值 k1,标准差上阈值 k2,窗口半宽s
    2. 计算图像灰度均值MG和灰度标准差σG
    3. 对于每一个像素,计算邻域(大小为2step+1的方块)内灰度均值ML和标准差σL
    4. 如果ML<=k0MG并且k1σG<=σL<=k2σG,将像素灰度乘以E
    c. matlab代码

    测试脚本LocalEnhancement_test.m

    %% 局部对比度增强
    clear all;clc;close all;
    ImgFile='E:\图像处理\冈萨雷斯图片库\DIP3E_Original_Images_CH03\tungsten_original.tif';
    step=1;
    para.E=4.0;
    para.k0=0.4; % 均值下阈值
    para.k1=0.02; % 标准差下阈值
    para.k2=0.4; % 标准差上阈值
    ImgIn=imread(ImgFile);
    ImgHistEq=histeq(ImgIn,256);
    ImgIn=double(ImgIn);
    % ImgIn=double(rgb2gray(ImgIn));
    [ MeanLocal,VarLocal ] = LocalStatistics( ImgIn, step );
    [ ImgOut ] = LocalEnhancement( ImgIn, MeanLocal, VarLocal,para );
    
    figure;imshow(uint8(ImgIn));title('原图');
    figure;imshow(uint8(ImgOut));title('局部统计增强');
    figure;imshow(ImgHistEq);title('全局灰度增强 - 直方图均衡');

    函数LocalEnhancement.m

    function [ ImgOut ] = LocalEnhancement( ImgIn, MeanLocal, VarLocal,para )
    %LOCALENHANCEMENT Summary of this function goes here
    % 使用局部均值和局部标准差实现局部图像增强
    %   Detailed explanation goes here
    [rows, cols]=size(ImgIn);
    MeanGlobal=mean(ImgIn(:));
    VarGlobal=std(ImgIn(:));
    for i=1:rows
        for j=1:cols
            if MeanLocal(i,j)<=para.k0*MeanGlobal...
                    &&VarLocal(i,j)>=para.k1*VarGlobal...
                    &&VarLocal(i,j)<=para.k2*VarGlobal
                ImgIn(i,j)=para.E*ImgIn(i,j);
            end
        end
    end
    ImgOut=ImgIn;
    end
    

    函数LocalStatistics.m

    function [ MeanLocal,VarLocal ] = LocalStatistics( ImgIn, step )
    %LOCALSTATISTICS Summary of this function goes here
    % 求局部的灰度均值灰度方差
    % ImgIn - 输入灰度图,double
    % step  - 窗口大小为2*step+1,step越大,细节越少
    %   Detailed explanation goes here
    % 矩阵边缘补齐
    ImgIn=padarray(ImgIn,[step, step],'replicate');
    [rows, cols] = size(ImgIn);
    MeanLocal=zeros(size(ImgIn));
    VarLocal=zeros(size(ImgIn));
    for i = step+1:1:rows-step
        for j = step+1:1:cols-step
            LocalNeighbor=ImgIn(i-step:i+step,j-step:j+step);
            MeanLocal(i,j)=mean(LocalNeighbor(:));
            VarLocal(i,j)=std(LocalNeighbor(:));
        end
    end
    % 切割成和原图相同的大小
    MeanLocal=MeanLocal(2:end-1,2:end-1);
    VarLocal=VarLocal(2:end-1,2:end-1);
    
    end

    结果输出:
    目的是想要增强右下方的纹理,而不改变中间较亮的纹理。全局灰度增强不但不能增强右下方的纹理,而且改变了中间较亮的纹理。局部统计增强达到了目的,但是产生了一些不想要的假边缘(如左上方)和奇异点(一些散乱的白点)。
    源图像全局HistEQ
    图9. 原图和全局灰度增强的图。全局histeq对右下角纹理的增强效果不明显,而且改变了中间较亮区域的灰度。

    LocalStatistics
    图10. 局部统计增强。右下方纹理得到明显的增强,而且不改变中间较亮区域的纹理。但是产生了一些边缘失真。


    2017.4.24补充:


    直方图均衡和其他的均衡方法都会把图像的直方图尽量调整的分布均匀一些. 尽量不会出现较高的尖峰和较大的灰度空档.这是因为这些算法不知道要增强哪些部分的灰度, 也不知道要去抑制哪些部分的灰度. 而某一部分灰度的增强必然意味着另外一部分灰度的压缩. 所以这些算法只能”雨露均沾”, 把hist中所有的灰度都调整到较为均匀的分布. 雨露均沾的结果, 可能是细节的增强和提升. 也有可能是背景被增强, 造成背景噪声放大, 还不如不增强. 针对后一种情况, 就有了CLAHE等限制对比度的算法.


    1. 本文主要参考冈萨雷斯《数字图像处理》第三版英文版
    2. 如果matlab读入*.tif图片出错,参见:
      http://jingyan.baidu.com/article/aa6a2c14f9441b0d4c19c4b0.html
    展开全文
  • 包含图像对比度增强的可逆信息隐藏的完整matlab代码,可运行。包括直方图,信息隐藏和信息提取,所设计的基于图像对比度增强的可逆信息隐藏算法包含图像的对比度增强和可逆信息隐藏两个部分,主要是在灰度直方图上...
  • opencv 彩色图像对比度增强

    千次阅读 2018-11-10 03:11:44
    opencv 彩色图像对比度增强

    分享一下我老师大神的人工智能教程!零基础,通俗易懂!http://blog.csdn.net/jiangjunshow

    也欢迎大家转载本篇文章。分享知识,造福人民,实现我们中华民族伟大复兴!

                   

    一般地,图像对比度都是在灰度图上进行增强,这在我的一篇文章中已经给出了实现方法(http://blog.csdn.net/abcjennifer/article/details/7401921),最通常的办法就是直方图均衡化,而彩色图像的对比度增强其实道理相同。这里给出我的实现方法:

    首先将RGB图像转到YCbCr分量,然后对Y分量上的图像进行直方图均衡化,最后进行图像合成。详见代码~(*^__^*) 


    /**@Function: Color image contrast enhancement*@Date: 2012-4-5*@Author: 张睿卿*/int ImageStretchByHistogram(IplImage *src1,IplImage *dst1)/*************************************************Function:      通过直方图变换进行图像增强,将图像灰度的域值拉伸到0-255src1:               单通道灰度图像                  dst1:              同样大小的单通道灰度图像 *************************************************/{ assert(src1->width==dst1->width); double p[256],p1[256],num[256]; memset(p,0,sizeof(p)); memset(p1,0,sizeof(p1)); memset(num,0,sizeof(num)); int height=src1->height; int width=src1->width; long wMulh = height * width; //statistics for(int x=0;x<src1->width;x++) {  for(int y=0;y<src1-> height;y++){   uchar v=((uchar*)(src1->imageData + src1->widthStep*y))[x];   num[v]++;  } } //calculate probability for(int i=0;i<256;i++) {  p[i]=num[i]/wMulh; } //p1[i]=sum(p[j]); j<=i; for(int i=0;i<256;i++) {  for(int k=0;k<=i;k++)   p1[i]+=p[k]; } // histogram transformation for(int x=0;x<src1->width;x++) {  for(int y=0;y<src1-> height;y++){   uchar v=((uchar*)(src1->imageData + src1->widthStep*y))[x];   ((uchar*)(dst1->imageData + dst1->widthStep*y))[x]= p1[v]*255+0.5;              } } return 0;}void CCVMFCView::OnYcbcrY(){ IplImage* Y = cvCreateImage(cvGetSize(workImg),IPL_DEPTH_8U,1); IplImage* Cb= cvCreateImage(cvGetSize(workImg),IPL_DEPTH_8U,1); IplImage* Cr = cvCreateImage(cvGetSize(workImg),IPL_DEPTH_8U,1); IplImage* Compile_YCbCr= cvCreateImage(cvGetSize(workImg),IPL_DEPTH_8U,3); IplImage* dst1=cvCreateImage(cvGetSize(workImg),IPL_DEPTH_8U,3); int i; cvCvtColor(workImg,dst1,CV_BGR2YCrCb); cvSplit(dst1,Y,Cb,Cr,0);  ImageStretchByHistogram(Y,dst1);   for(int x=0;x<workImg->height;x++)  {   for(int y=0;y<workImg->width;y++)   {    CvMat* cur=cvCreateMat(3,1,CV_32F);    cvmSet(cur,0,0,((uchar*)(dst1->imageData+x*dst1->widthStep))[y]);    cvmSet(cur,1,0,((uchar*)(Cb->imageData+x*Cb->widthStep))[y]);    cvmSet(cur,2,0,((uchar*)(Cr->imageData+x*Cr->widthStep))[y]);     for(i=0;i<3;i++)    {     double xx=cvmGet(cur,i,0);     ((uchar*)Compile_YCbCr->imageData+x*Compile_YCbCr->widthStep)[y*3+i]=xx;    }   }  }  cvCvtColor(Compile_YCbCr,workImg,CV_YCrCb2BGR);  m_ImageType=3;  Invalidate();}





               

    给我老师的人工智能教程打call!http://blog.csdn.net/jiangjunshow

    这里写图片描述
    展开全文
  • 图像对比度增强工具 使用CUDA GPU程序对灰度图像和彩色图像执行直方图均衡化
  • 传统的图像对比度增强技术容易造成图像的局部区域过分增强或增强不足等问题, 因此提出了一种结合不可分小波分析和曲线拟合的图像对比度增强方法。该方法以标准清晰图像的均值和标准差作为图像对比度增强的理想目标, ...
  • matlab开发-图像对比度增强亮度保留最佳算法修正和加权总和。基于最优伽玛校正和加权和的图像对比度增强亮度保持
  • 此功能允许设置全局图像强度阈值,从而导致对比度增强(按颜色量化的价格)。 这是一种原始的图像判别方式元素基于它们的颜色 - 增加一些,减少其他,根据它们与阈值的关系。 该贡献还包括一个包含此功能的小型 GUI...
  • matlab开发-图像对比度增强,使用最大亮度强度的灰度质量。最大强度覆盖直方图均衡增强图像对比度
  • 使用python实现图像对比度增强

    万次阅读 2018-05-25 22:15:08
    对单张图像进行图像对比度增强:from PIL import Image from PIL import ImageEnhance img = Image.open('./0h/FGF2.tif') img.show() #对比度增强 enh_con = ImageEnhance.Contrast(img) contrast = 1.5 img_...

    对单张图像进行图像对比度增强:

    from PIL import Image
    from PIL import ImageEnhance
    
    img = Image.open('./0h/FGF2.tif')
    img.show()
    
    #对比度增强  
    enh_con = ImageEnhance.Contrast(img)  
    contrast = 1.5  
    img_contrasted = enh_con.enhance(contrast)  
    img_contrasted.show() 
    img_contrasted.save("./0h/FGF2-new.tif")
    

    展开全文
  • 主要介绍了Python 图像对比度增强的几种方法(小结),文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
  • 图像增强中,我们遇到了使用灰度图像对比度增强,同样我们也可以在颜色空间中做同样的事情,但是这个问题会根据特定的颜色空间而有所不同,例如:RGB、CMYK 和 HSI
  • 反锐化掩蔽滤波器(UMF)已广泛应用于图像处理前端以增强对比度。 过滤器, 易于实现,基于增强的概念图像本身的缩放和高通版本。 联动部队性能在很大程度上取决于高通的生成要添加的信号及其相关的比例因子。 然而...
  • 图像对比度增强:调整过暗或者过亮图像的对比度,使图像更加鲜明 调用攻略(Python3) 首先认证授权: 在开始调用任何API之前需要先进行认证授权,具体的说明请参考: http://ai.baidu.com/docs#/Auth/top 获取...
  • 数据融合matlab代码从多重曝光图像中学习深层单图像对比度增强器 抽象的 由于不良的照明条件和数字成像设备的动态范围有限,因此记录的图像通常曝光不足/曝光过度且对比度较低。 大多数以前的单图像对比度增强(SICE...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 2,751
精华内容 1,100
关键字:

图像对比度增强