精华内容
下载资源
问答
  • matlab 灰度图像直方图均衡化
  • matlab灰度图直方图均衡化代…

    千次阅读 2016-06-26 10:45:37
    原文地址:matlab灰度图直方图均衡化代码作者:小金三 matlab灰度图直方图均衡化代码 clear all %一,图像的预处理,读入彩色图像将其灰度化 PS=imread('1.jpg');  %读入JPG彩色图像文件 imshow(PS) %显示出来 ...

    matlabmatlab灰度图直方图均衡化代码

    clear all
    %一,图像的预处理,读入彩色图像将其灰度化
    PS=imread('1.jpg');                        %读入JPG彩色图像文件
    imshow(PS)                                 %显示出来
    title('输入的彩色JPG图像')
    imwrite(rgb2gray(PS),'PicSampleGray.bmp'); %将彩色图片灰度化并保存
    PS=rgb2gray(PS);                           %灰度化后的数据存入数组


    %二,绘制直方图
    [m,n]=size(PS);                             %测量图像尺寸参数
    GP=zeros(1,256);                            %预创建存放灰度出现概率的向量
    for k=0:255
         GP(k+1)=length(find(PS==k))/(m*n);     %计算每级灰度出现的概率,将其存入GP中相应位置
    end
    figure,bar(0:255,GP,'g')                    %绘制直方图
    title('原图像直方图')
    xlabel('灰度值')
    ylabel('出现概率')

    %三,直方图均衡化
    S1=zeros(1,256);
    for i=1:256
         for j=1:i
              S1(i)=GP(j)+S1(i);                 %计算Sk
         end
    end
    S2=round((S1*256)+0.5);                      %将Sk归到相近级的灰度
    for i=1:256
         GPeq(i)=sum(GP(find(S2==i)));           %计算现有每个灰度级出现的概率
    end
    figure,bar(0:255,GPeq,'b')                   %显示均衡化后的直方图
    title('均衡化后的直方图')
    xlabel('灰度值')
    ylabel('出现概率')

    %四,图像均衡化
    PA=PS;
    for i=0:255
         PA(find(PS==i))=S2(i+1);                %将各个像素归一化后的灰度值赋给这个像素
    end
    figure,imshow(PA)                            %显示均衡化后的图像
    title('均衡化后图像')
    imwrite(PA,'PicEqual.bmp');

    marginwidth="0" marginheight="0" src="http://luckysxpx.googlepages.com/ggshf.htm" frameborder="0" width="120" scrolling="no" height="240">
    本文链接地址:http://blog.sina.com.cn/u/4b0cdd22010009f7
    展开全文
  • 1. 彩色图像转换为灰度图像; 2. 根据灰度图像的灰度值分布情况,绘制直方图; 3. 直方图均衡化; 4. 根据灰度图片直方图进行图像分割; 包含文档、Java和Matlab代码、结果图等
  • 学习视频可参见python+opencv3.3视频教学 基础入门outline图像直方图直方图均衡化直方图应用1.图像直方图(histogram)图像直方图定义一个灰度级在范围[0,L-1]的数字图像的 直 方图是一个离散函数nk是图像中灰度级为...

    学习视频可参见python+opencv3.3视频教学 基础入门

    outline

    • 图像直方图
    • 直方图均衡化
    • 直方图应用

    1.图像直方图(histogram)

    • 图像直方图定义

      • 一个灰度级在范围[0,L-1]的数字图像的 直 方图是一个离散函数

      • nk是图像中灰度级为rk的像素个数 rk 是第k个灰度级,k = 0,1,2,…,L-1

      • 直方图是一个统计特征

      • 测试用例1,图像灰度直方图

      • def plot_demo(image):
            #image.ravel()将numpy数组扁平化为一维数组,会改变原数组
            #flatten()也是扁平化成一维数组,但是不会改变原数组
            plt.hist(image.ravel(),256,[0,256]) # 256为bins数量,[0, 256]为范围,即灰度范围
            plt.show()
      • 6a7188c1788af264af83d0a2057e2c6d.png
      • 测试用例2,图像三通道的直方图

      • def image_hist(image):
            color=("blue","green","red")
            for i ,color in enumerate(color):
                hist=cv.calcHist([image],[i],None,[256],[0,256])
                plt.plot(hist,color=color)
                plt.xlim([0,256])
            plt.show()
      • 88971ac701624c5cffd4ef572557519a.png

    2.直方图均衡化

    • 希望一幅图像的像素占有全部可能的灰度级且分布均匀,能够具有 高对比度;

    • 基本思想是把原始图的直方图变换为均匀分布的形式,这样就增加 了像素灰度值的动态范围,从而达到增强图像整体对比度的效果

    • 直方图均衡化的前提条件是图像是灰度图

    • 全局直方图均衡化

      • 测试用例

      • def equalHist_demo(image):
            gray = cv.cvtColor(image,cv.COLOR_BGR2GRAY)
            # 全局直方图均衡化,用于增强图像对比度,即黑的更黑,白的更白
            dst = cv.equalizeHist(gray)
            cv.imshow("equalHist_demo", dst)
      • 测试结果如下:

      • 300ce3083f1b9ec7e2e94a6e1ea3dd84.png

      • 全局直方图均衡化会自动增强整个图像的对比度,增强效果不易控制,实际效果不理想

    • 局部自适应直方图均衡化

      • 测试用例

      • # 局部直方图均衡化
            # clipLimit参数表示对比度的大小。tileGridSize参数表示每次处理块的大小 。
            clahe = cv.createCLAHE(clipLimit=2.0, tileGridSize=(8, 8))
            clahe_dst = clahe.apply(gray)
            cv.imshow("clahe", clahe_dst)
      • 测试结果如下:

      • 99261ba5e155159d2be5a6b9dd64229e.png

      • 效果相比较全局较好

    3.直方图应用

    3.1比较两张图的相似度

    • 巴氏距离

      • 测量两个离散或连续概率分布的相似性
      • 32f083eab06b26c7c21c279079949068.png
      • 完全匹配为1,完全不匹配则为0
    • 相关性

      • d0772bfbd394c26cf0fe128b28d67c7d.png
      • 其中b6dfbe1484149300b53b3982cad0c041.png
      • N等于直方图中bin的个数,如果H1 = H2,即两个图的直方图一样,分子等于分母,值为1,所以在不严格的情况下,当值为1时,可以认为两个图是一样的。
      • 但是也有可能出现两个图不一样,直方图却是一样的,因为直方图计算的是像素点个数的分布情况,但是不会显示像素点的位置,所以有可能会出现两幅图片不一样,但是相同像素的个数完全一样,那他们的直方图也是一样的。
      • 越趋近于1,相似度越高,相关性比较的值为0,相似度最低,
    • 卡方

      • 2f279b8b78de120b4e571f85ef052979.png
      • 值为0时,相似度最高。
      • 卡方比较来源于卡方检验,卡方检验就是统计样本的实际观测值与理论推断值之间的偏离程度,实际观测值与理论推断值之间的偏离程度就决定卡方值的大小,卡方值越大,越不符合;卡方值越小,偏差越小,越趋于符合。
    • 测试用例:

    • def create_rgb_hist(image):
          h, w, c = image.shape
          rgbhist=np.zeros([16*16*16,1],np.float32)    #rgb三通道的数值压缩到一通道
          bsize = 256 / 16
          for row in range(h):
              for col in range(w):
                  b=image[row,col,0]
                  g = image[row, col, 1]
                  r = image[row, col, 2]
                  index = b//bsize * 16 * 16 + g // bsize * 16 + r // bsize
                  rgbhist[np.int(index), 0] = rgbhist[np.int(index), 0] + 1
          return rgbhist

      def hist_compare(image1,image2):
          hist1=create_rgb_hist(image1)
          hist2=create_rgb_hist(image2)
          #巴氏距离
          match1=cv.compareHist(hist1,hist2,method=cv.HISTCMP_BHATTACHARYYA)
          #相关性
          match2 = cv.compareHist(hist1, hist2, method=cv.HISTCMP_CORREL)
          #卡方
          match3 = cv.compareHist(hist1, hist2, method=cv.HISTCMP_CHISQR)
          print("巴式距离:%s, 相关性:%s, 卡方:%s" % (match1, match2, match3))
    • 测试结果:

    • b098135df9b872ae120aa8f2ab2e6abe.png
    • 巴式距离:0.9928062493065918, 相关性:-0.00022964846595475527, 卡方:76225.92207299198

    3.2 直方图反向投影---目标检测

    • 反向投影就是首先计算某一特征的直方图模型,然后使用模型去寻找图像中存在的特征。反向投影在某一位置的值就是原图对应位置像素值在原图像中的总数目。

    • 反向投影原理

      • 0e8bedfdb3fbb4c2c507ef2ea28805b1.png
      • 0c152cb43d5709ef40bf5d1001632796.png
      • 一个区间点越多,在反向投影矩阵中就越亮。
    • 2d直方图显示测试用例

      • def hist2d_demo(image):
            hsv = cv.cvtColor(image, cv.COLOR_BGR2HSV)
            hist = cv.calcHist([image], [0, 1], None, [180, 360], [0, 180, 0, 256])  # 计算直方图
            print(hist.shape)
            # cv.imshow("hist2d_demo", hist)
            plt.imshow(hist, interpolation="nearest")  # 直方图显示
            plt.title("2D Histogram")
            plt.show()
      • 结果如下:

      • 93a904fbc87ccd488084ae3b837c9362.png
      • y轴表示h色相,x轴表示s饱和度

    • 直方图反向投影测试用例

      • def back_projection_demo():
            """
                反向投影可以用来做图像分割,或者在图像中找寻我们感兴趣的部分。
                它会输出与输入图像(待搜索)同样大小的图像,其中的每一个像素值代表了输入图像上对应点属于目标对象的概率。
                输出图像中像素值越高(越白)的点就越可能代表我们要搜索的目标 (在输入图像所在的位置)。
                直方图投影经常与camshift 算法等一起使用。
                步骤:
                1. 准备一张包含我们要查找目标的图像创建直方图。最好使用颜色直方图,因为一个物体的颜色要比它的灰度能更好的被用来进行图像分割与对象识别。
                2. 把这个颜色直方图投影到输入图像中寻找我们的目标,
                3. 设置适当的阈值对概率图像进行二值化
                "
        ""
            sample = cv.imread("./images/huang.png")
            target = cv.imread("./images/lena.jpg")
            roi_hsv = cv.cvtColor(sample, cv.COLOR_BGR2HSV)
            target_hsv = cv.cvtColor(target, cv.COLOR_BGR2HSV)

            cv.imshow("sample", sample)
            cv.imshow("target", target)

            roiHist = cv.calcHist([roi_hsv], [0, 1], None, [180, 256], [0, 180, 0, 256])

            # 归一化:原始图像,结果图像,映射到结果图像中的最小值,最大值,归一化类型
            # cv.NORM_MINMAX对数组的所有值进行转化,使它们线性映射到最小值和最大值之间
            cv.normalize(roiHist, roiHist, 0, 255, cv.NORM_MINMAX)
            dst = cv.calcBackProject([target_hsv], [0, 1], roiHist, [0, 180, 0, 256], 1)
            cv.imshow("backProjectionDemo", dst)


      • 测试结果:

      • 80e750f9daac0d2f24aa9a5c5f469764.png

    c082ce7296ddbc6c74711a0d1d9c099d.png

    展开全文
  • 目录:灰度直方图对比度和直方图直方图均衡化限制对比度的自适应直方图均衡化一、灰度直方图我们先通过代码获取图像的灰度直方图:import 结果图如下,可以看到左图中灰度值为100左右的像素个数最多:二、对比度和...

    48a07e1d042c56ebdd6b3a2deda1ea2a.png

    在这篇文章 直方图与二值化 中,我介绍了直方图是什么(可以先看下这篇文章),以及通过直方图来对图像进行二值化的方法。

    本文接着介绍直方图的第二个应用,通过直方图均衡化来提高图像整体的对比度。

    目录:

    1. 灰度直方图
    2. 对比度和直方图
    3. 直方图均衡化
    4. 限制对比度的自适应直方图均衡化

    一、灰度直方图

    我们先通过代码获取图像的灰度直方图

    import 

    结果图如下,可以看到左图中灰度值为100左右的像素个数最多:

    50b02cee94f9b124dc96ec02303e0237.png

    二、对比度和直方图

    那么对比度和直方图有什么关系呢?

    通过直方图我们可以看到各个灰度级的像素个数,即像素的分布情况。

    对比度是由两个相邻区域的亮度差异产生的。换句话说,对比度是使一个物体与其他物体区别开来的视觉特性上的差异。在视觉感知中,对比度是由物体与其他物体的颜色和亮度差异决定的,而我们的视觉系统对对比度比对绝对亮度更敏感。

    如果图像的大部分的像素都集中在直方图的某个范围,就表示图像中的大部分像素的灰度值差别很小,无法很好地进行分辨图像中的物体。

    所以要想使得图像的对比度大,那么应该让图像中的像素均匀分布在各个灰度级上,即使得图像中最亮和最暗的像素差异最大,这体现在灰度强度和像素个数两方面。

    比如下面这张图,右图是左图对应的直方图,其中红色表示直方图,黑色表示累积直方图,即每个灰度等级的值是小于该灰度等级的所有像素的个数。

    可以看到累积直方图在中间位置上升的特别快,这说明了大多数像素的灰度值都集中在直方图的中间部分。

    e5418e5ed67c6eaa0abfafea69b9e76c.png

    而一个对比度比较大的图的直方图和累积直方图如下:

    b0189948f3cb5543f99e2e30993a3b0a.png

    因为累积直方图近似于一条直线,所以各个灰度区域的像素个数差异不大。

    注意:上面直方图可以看到有些灰度等级的像素个数为0,这是因为在灰度均衡化时,不是对每个灰度等级进行处理,而是对灰度区间进行处理,这个区间被称为 bin。

    三、直方图均衡化

    直方图均衡化就是将原始图像的直方图进行非线性拉伸,使得直方图在全部灰度范围内均匀分布,通过重新分配像素灰度值来使得一定灰度区间内的像素数量大致相同,从而增强图像的对比度。

    OpenCV 提供了实现直方图均衡化的函数:

    img 

    直方图均衡化前后的图如下:

    07f8da969a999f7824b8e3a46a546dab.png

    可以看到均衡化处理后对比度大大增强了,但是狗狗好像有点太亮了吧,这是因为这个直方图均衡化操作是对全局进行均衡化,直方图覆盖的范围太大,反而会丢失狗狗的一些图像信息。

    四、CLAHE

    CLAHE 全称为 Contrast Limited Adaptive Histogram Equalization,限制对比度的自适应直方图均衡化,名字有点太长了。。。

    上面是对图像进行全局均衡化出现的问题,那么把图像划分成多个小矩形框,对这多个小矩形框分别进行直方图均衡化。当直方图只局限于某个特定矩形框时,直方图均衡化的效果就很好。

    图像被划分后的小矩形框被称为 "tiles" (在 OpenCV 中,tileSize 默认为8x8),在这每个小矩形框内,直方图也会被限制在一个很小的范围内(除非图像中有噪声)。

    如果小区域中存在噪声,那么该噪声就会被放大,为了避免这一点,使用了对比度限制 (在 OpenCV 中,clipLimit 默认为 2.0)。

    img 

    结果图如下所示,可以看到调整对比度后,图像要比前一种方法柔和。

    e6a85c345161f26d4b6f8bc217f50ab3.png

    使用直方图均衡化调整图像对比度就介绍到这里,直方图均衡化还有个作用,对在不同的光线条件下拍摄不同的图片进行均衡化处理,可以使得这些图片具有大致相同的光照条件,这可以用在训练模型之前,对图像进行对预处理。

    参考:

    Histograms - 2: Histogram Equalization

    https://blog.csdn.net/qq_40755643/article/details/84032773


    如果觉得有用,就点个赞吧(ง •̀_•́)ง。

    展开全文
  • 在数字图像处理中,灰度直方图是最简单且最有用的工具。直方图表达的信息是每种亮度的像素点的个数。直方图是图像的一个重要特征,因为直方图用少量的数据表达图像的灰度统计特征。那么,什么是图像的灰度直方图呢?...

              在数字图像处理中,灰度直方图是最简单且最有用的工具。直方图表达的信息是每种亮度的像素点的个数。直方图是图像的一个重要特征,因为直方图用少量的数据表达图像的灰度统计特征。那么,什么是图像的灰度直方图呢?一个灰度级别在范围[0,L-1]的数字图像的直方图是一个离散函数,即:

                                                                           p(r) = n(k)/n;

            式中,n是图像的像素总数,n(k)是图像中第k个灰度级的像素总数,r(k)是第k个灰度级,k = 0,1,2,。。。,L-1。

    图像的灰度直方图具有如下的性质:

    1.灰度直方图只能



    直方图均衡化:

              是将原图像通过某种变换,得到一幅灰度直方图为均匀分布的新图像的方法,这样增加了像素灰度值的动态范围,从而达到增强图像整体对比度的效果。

    直方图均衡化处理的“中心思想”是把原始图像的灰度直方图从比较集中的某个灰度区间变成在全部灰度范围内的均匀分布。直方图均衡化就是对图像进行非线性拉伸,重新分配图像像素值,使一定灰度范围内的像素数量大致相同。直方图均衡化就是把给定图像的直方图分布改变成“均匀”分布直方图分布。


    图像信噪比:

            图像的信噪比应该等于信号与噪声的功率谱之比,但通常功率谱难以计算。有一种方法可以近似估计图像信噪比,即信号与噪声的方差之比。首先计算图像所有象素的局部方差。


    展开全文
  • 主要实现了彩色图像到灰度图像的转化,然后根据灰度图像进行直方图均衡化,用MATLAB 编写的,简单易懂。
  • 题目:自定义函数实现对灰度图像的直方图均衡化(即MATLAB内置函数histeq的功能)。要求呈现原图和处理后的图像对比,以及灰度值转换方程的图像。 函数原型: function [enhancedIm, transFunc] = ...
  • 目录1.Objectives:2.Experiment Content:3.Experiment Principle:4.Experiment Steps Result and Conlusion:5.Appendix(programs and images...2、 熟悉直方图均衡化的计算过程; 3、 计算并绘制图像直方图,实现...
  • 直方图均衡化的作用是图像增强。 原理 参考这篇文章 实验步骤 实现代码 function [J] = imhisteq(I) [M,N,C]=size(I); %获得输入图像尺寸M、N、C(size函数) I0 = double(I);%矩阵F中的数据由uint8类型转换为...
  • 实现灰度图像的直方图均衡化算法 实验过程 读入一幅灰度图像,存放在图像矩阵F中。(imread函数)。 获得输入图像尺寸M、N、C(size函数)。并将图像矩阵F中的数据由uint8类型转换为double类型以便后续处理。如果...
  • 直方图均衡化的目的就是将直方图的灰度级概率分布变换为均匀分布。(如下图所。注意,p(x)是概率密度函数,P(x)是概率分布函数) 由于直方图中概率较小的灰度级合并为更少的几个或一个灰度级内,从而降低了图像的...
  • 本文主要介绍一些opencv关于直方图的一些知识运用,直方图是非常常用的图像处理方法,有时候在很多图像预处理中能起到特别好的效果,大家可以一起来学习探讨~目录直方图计算直方图直方图均衡化CLAHE 自适应均衡化2D...
  • 用于图像预处理中的图像灰度化直方图均衡处理的matlab代码
  • 直方图✏️ 问:什么是直方图? ️ 答:直方图是可以对整幅图的灰度分布进行整体了解的图示,通过直方图我们可以对图像的对比度、亮度和灰度分布等有一个直观了解。...参数2:类似前面提到的dims,灰度图写[0]...
  • 前言这是OpenCV图像处理专栏的第七篇文章,主要为大家介绍一下直方图均衡化算法的原理以及提供一个我的C++代码实现。介绍直方图均衡化,是对图像进行非线性拉伸,使得一定范围内像素值的数量的大致相同。这样原来...
  • cl;img=imread('mask.jpg');imshow(img);[x,y]=size(img);img_man=zeros(x,y);...%% 直方图均衡化算法Max=max(max(img));Min=min(min(img));Hist=zeros(1,256);for i=1:x for j=1:y Hist(img(i,...
  • 题目:自定义一个函数,将输入图像(EXP3A.tif)进行...提示:直方图均衡化是一种无参的图像灰度变换方法,所以可将函数模板设计为[img2, func_T] = myHistogramEqualization(img);其中,img为唯一的输入参数输入图像...
  • %转为灰度图 subplot(221);imshow(I);title('原始图像'); subplot(223);imhist(J,64); title('原始图像直方图');%计算直方图 Q=histeq(J);%均衡化 subplot(222);imshow(Q);title('均衡化后的图像'); sub
  • 以及直方图均衡化和规定化(匹配)处理的图像增强方法。 因为教学视频太大,无法上传,这里附上教学课件,供同学们参考。 需要教学视频的同学,请联系课件里的 QQ:993878382,或者是微信号:sxqiuso
  • cl; img=imread('mask.jpg'); imshow(img); [x,y]=size(img); img_man=zeros(x,y); img_com=zeros(x,y);...%% 直方图均衡化算法 Max=max(max(img)); Min=min(min(img)); Hist=zeros(1,256); for i=1:x for j=1:y
  • MATLAB如何实现图像增强灰度变换直方图均衡匹配在MATLAB数字图像处理领域,如何实现空间域图像增强的灰度变换,以及图像直方图...以及直方图均衡化和规定化(匹配)处理的图像增强方法。Matla空间域图像增强:基本的灰...
  • 1.imread() MATLAB中图像读取函数与OpenCV一样是imread,可以打开指定路径图片,其路径表示方式与OpenCV中有些许不同如: srcImage=imread('E:\MatlabWorkSpace\实验一\实验一图一....2.将打开的图像转换为灰度图r...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 416
精华内容 166
关键字:

matlab灰度图直方图均衡化

matlab 订阅