精华内容
下载资源
问答
  • demo3:直方图处理(直方图---直方图) demo2:图片---图片 demo1:MATLAB自带
  • 对wheel图像实现直方图均衡化,matlab实现,包含完整实验步骤,结果
  • 这是基于CCS数字图像直方图均衡化处理,对图像的增加化有很大的效果
  • 基于直方图均衡化图像增强的DSP实现,邓恒淹,,利用直方图均衡化的方法对图像进行增强是一种经典的算法。目前,可以采用MATLAB以及VC 等方法进行实现。本文主要利用TI公司的DSP进行
  • MATLAB--数字图像处理 图像直方图均衡化

    万次阅读 多人点赞 2019-09-03 15:43:01
    图像直方图均衡化 首先,我们要理解什么是图像直方图均衡化: 把原始图像的灰度直方图从比较集中的某个灰度区间变成在全部灰度范围内的均匀分布。直方图均衡化就是对图像进行非线性拉伸,重新分配图像像素值,使一定...

    图像直方图均衡化

    首先,我们要理解什么是图像直方图均衡化:

    把原始图像的灰度直方图从比较集中的某个灰度区间变成在全部灰度范围内的均匀分布。直方图均衡化就是对图像进行非线性拉伸,重新分配图像像素值,使一定灰度范围内的像素数量大致相同。直方图均衡化就是把给定图像的直方图分布改变成“均匀”分布直方图分布,具体见下图(说的简单点,就是把原来的图像的灰度分配均匀,使得0-255都有一定的取值,这样对比度相对大一些,视觉上更好看一点):在这里插入图片描述
    这里我们可以直接利用histeq()、adapthisteq()函数对图像进行均衡化

     H= imread('a1.jpg'); 
    if length(size(H))>2
        H=rgb2gray(H);  
    end
    subplot(3,2,1);  
    imshow(H); title('原图');  
    subplot(3,2,2);  
    imhist(H); title('原图直方图');  
    subplot(3,2,3);  
    H1=adapthisteq(H);  
    imshow(H1); title('adapthisteq均衡后图');  
    subplot(3,2,4);  
    imhist(H1);title('adapthisteq均衡后直方图');  
    subplot(3,2,5);  
    H2=histeq(H);  
    imshow(H2); title('histeq均衡后图');  
    subplot(3,2,6);  
    imhist(H1); title('histeq均衡后直方图'); 
    

    效果图:
    在这里插入图片描述

    当然,我们也可以自己编写均衡化函数,首先就要了解均衡化的算法步骤(这里我就不多说了)
    上代码:

    H= imread('a1.jpg'); 
    
    %判断是否为三通道彩色图片 若是 则将其灰度化
    if length(size(H))>2
        H=rgb2gray(H);  
    end
    
    %获取图片的尺寸 便于计算总像素数 即m*n 
    [m,n]=size(H);  
    
    %生成一个一行256列的矩阵
    p=zeros(1,256);  
    
    % 统计各灰度的像素个数 
    %find(H==i) 是在图像矩阵里面寻找灰度为i的点坐标 
    % 因为矩阵是从1开始的 所以为p(i+1)
    for i=0:255  
       p(i+1)=length(find(H==i))/(m*n);  
    end  
    
    
    subplot(2,2,1);  
    imshow(H);  
    title('原图');  
    subplot(2,2,2);  
    % 显示原图的直方图
    bar(0:255,p,'b');  
    title('原图直方图');  
     
     % 利用循环 累加概率值
    s=zeros(1,256);  
    for i=1:256  
         for j=1:i  
             s(i)=p(j)+s(i);                  
         end  
    end  
    
    %对s中的数先乘以255,再取整   
    a=round(s*255);  
    b=H;  
    %更新原图像的灰度
    for i=0:255  
         b(find(H==i))=a(i+1);                
    end
      
    subplot(2,2,3);  
    imshow(b)                            
    title('均衡化后图像');  
     %统计更新后的概率
    for i=0:255  
        GPeq(i+1)=sum(p(find(a==i)));            
    end  
    subplot(2,2,4);  
    bar(0:255,GPeq,'b'); title('均衡化后的直方图'); 
    

    效果图:
    在这里插入图片描述

    方法二(从大佬那里copy的)

    Img= imread('a1.jpg'); 
    if length(size(Img))>2
        Img=rgb2gray(Img);  
    end
     
    %绘制原始图像的直方图
    [height,width]=size(Img);  
    [counts1, x] = imhist(Img,256);  
    counts2 = counts1/height/width;
    figure(1),
    subplot(1,2,1),
    imshow(Img);title('原始图像');
    subplot(1,2,2),
    stem(x, counts2); title('原始图像直方图');
     
    %统计每个灰度的像素值累计数目
    NumPixel = zeros(1,256);%统计各灰度数目,共256个灰度级  
    for i = 1:height  
        for j = 1: width  
        %对应灰度值像素点数量+1  
        %NumPixel的下标是从1开始,而图像像素的取值范围是0~255,所以用NumPixel(Img(i,j) + 1)  
        NumPixel(Img(i,j) + 1) = NumPixel(Img(i,j) + 1) + 1;  
        end  
    end  
     
    %将频数值算为频率
    ProbPixel = zeros(1,256);  
    for i = 1:256  
        ProbPixel(i) = NumPixel(i) / (height * width * 1.0);  
    end  
     
    %函数cumsum来计算cdf,并将频率(取值范围是0.0~1.0)映射到0~255的无符号整数
    CumuPixel = cumsum(ProbPixel);  
    CumuPixel = uint8(255 .* CumuPixel + 0.5); 
     
    %直方图均衡。赋值语句右端,Img(i,j)被用来作为CumuPixel的索引
    for i = 1:height  
        for j = 1: width  
            Img(i,j) = CumuPixel(Img(i,j)+1);  
        end  
    end  
     
    %显示更新后的直方图
    figure(2),
    subplot(1,2,1),
    imshow(Img); title('直方图均衡化图像'); 
    [counts1, x] = imhist(Img,256);  
    counts2 = counts1/height/width;  
    subplot(1,2,2),
    stem(x, counts2); title('直方图均衡化后图像的直方图');
    

    上面都是对灰度图片进行均衡化,那么对彩色图片怎么均衡化呢?办法肯定是有的。我们知道,彩色图片无非就是RGB三通道组成的,只要我们分别对三个通道进行均衡化,再合成,得到的图片就是彩色的,均衡化后的。
    上代码:

    Img= imread('a1.jpg'); 
    OutImg=Img;
    %分别提取三通道的信息
    R = Img(:,:,1);  
    G = Img(:,:,2);  
    B = Img(:,:,3);  
    
    %分别对三通道的图片进行均衡化 
    R = histeq(R, 256);  
    G = histeq(G, 256);  
    B = histeq(B, 256);  
     
     %最后合成为一张图片
    OutImg(:,:,1) = R;  
    OutImg(:,:,2) = G;  
    OutImg(:,:,3) = B;  
     
    figure,
    subplot(1,2,1),
    imshow(Img);title('原始图像');
    subplot(1,2,2),
    imshow(OutImg); title('均衡化后结果');
    

    效果图(感觉颜色更加丰富了,哈哈):
    在这里插入图片描述
    这里其实还有一种方法,就是先把RGB转换为HSV,再均衡化
    上代码:

    mg= imread('a1.jpg'); 
    hsvImg = rgb2hsv(Img);  
    V=hsvImg(:,:,3);  
    [height,width]=size(V);  
     
    V = uint8(V*255);  
    NumPixel = zeros(1,256);  
    for i = 1:height  
        for j = 1: width  
        NumPixel(V(i,j) + 1) = NumPixel(V(i,j) + 1) + 1;  
        end  
    end  
     
    ProbPixel = zeros(1,256);  
    for i = 1:256  
        ProbPixel(i) = NumPixel(i) / (height * width * 1.0);  
    end  
     
    CumuPixel = cumsum(ProbPixel);  
    CumuPixel = uint8(255 .* CumuPixel + 0.5);  
     
    for i = 1:height  
        for j = 1: width  
            V(i,j) = CumuPixel(V(i,j)+1);  %注意,这里需要+1,要不然会出问题
        end  
    end  
     
    V = im2double(V);  
    hsvImg(:,:,3) = V;  
    outputImg = hsv2rgb(hsvImg);  
    figure,
    subplot(1,2,1),
    imshow(Img);title('原始图像');
    subplot(1,2,2),
    imshow(outputImg); title('在HSV空间均衡化后结果');
    

    效果图(感觉没有上一种方法好看,这个其实是要分图片的):
    在这里插入图片描述

    更多

    获取更多资料、代码,微信公众号:海轰Pro
    回复 海轰 即可

    展开全文
  • """对一幅灰度图像进行直方图均衡化""" #计算图像的直方图 #在numpy中,也提供了一个计算直方图的函数histogram(),第一个返回的是直方图的统计量,第二个为每个bins的中间值 imhist,bins = histogram(im.flatten...
  • 提出了一个基于概率的数字图像直方图均衡化新方法,该算法不但很好地解决了直方图均衡化的“过亮现象”,而且保留了经典算法的快速、自动化优点,有利于实现真正意义上的人工智能。最后通过实验仿真,并对算法的均衡...
  • 数字图像处理实验(1)--灰度图的直方图均衡化。编程实现灰度图像的直方图均衡化处理。要求给出原始图像的直方图、均衡化图像及其直方图和直方图均衡化时所用的灰度级变换曲线图。
  • 直方图均衡化的基本原理是:对在图像中像素个数多的灰度值(即对画面起主要作用的灰度值)进行展宽,而对像素个数少的灰度值(即对画面不起主要作用的灰度值)进行归并,把原始图像的灰度直方图从比较集中的某个灰度...

    直方图均衡化

    直方图均衡化(Histogram equalization)是一种常用的灰度变换方法。

    基本原理

    直方图均衡化的基本原理是:对在图像中像素个数多的灰度值(即对画面起主要作用的灰度值)进行展宽,而对像素个数少的灰度值(即对画面不起主要作用的灰度值)进行归并,把原始图像的灰度直方图从比较集中的某个灰度区间变成在全部灰度范围内的均匀分布。从而增大对比度,使图像清晰,达到增强的目的。

    直方图均衡化就是对图像进行非线性拉伸,重新分配图像像素值,使一定灰度范围内的像素数量大致相同。
    直方图均衡化就是把给定图像的直方图分布改变成“均匀”分布直方图分布。

    简单来说就是,如果图片较暗,整体的灰度偏向于较低的值,就会对其通过运算进行映射,就能够将灰度值的差距拉开,达到增强的目的。如图片较亮,则相反。

    具体实现

    我这里写的是RGB三通道的均衡化处理,分别对每个通道进行直方图均衡化,最后合在一起,之后修改了方法,对三个通道进行求平均值再赋值,效果好了很多。

    对灰度图像进行处理也是如此,不过RGB的值是一样的。

    当然这样的方法处理彩色图像效果不太好,对彩色图像的直方图均衡化一般是通过转换RGB颜色空间为HSL颜色空间,然后只对L空间(Lightness)进行直方图均衡化。

    #include <iostream>
    #include <opencv2/opencv.hpp>
    
    using namespace cv;
    using namespace std;
    //直方图均衡化
    Mat Histogramequalization(Mat src) {
        int R[256] = { 0 };
        int G[256] = { 0 };
        int B[256] = { 0 };
        int T[256] = { 0 };
        int rows = src.rows;
        int cols = src.cols;
        int sum = rows * cols;
        //统计直方图的RGB分布
        for (int i = 0; i < rows; i++) {
            for (int j = 0; j < cols; j++) {
                B[src.at<Vec3b>(i, j)[0]]++;
                G[src.at<Vec3b>(i, j)[1]]++;
                R[src.at<Vec3b>(i, j)[2]]++;
            }
        }
        //分别对rgb三个通道计算每个色阶的概率,并计算存储均衡化后的色阶
        double rgb[3] = { 0 };
        for (int i = 0; i < 256; i++) {
            rgb[0] += B[i];
            B[i] = rgb[0] * 255 / sum;
            rgb[1] += G[i];
            G[i] = rgb[1] * 255 / sum;
            rgb[2] += R[i];
            R[i] = rgb[2] * 255 / sum;
    //求三个通道的平均值
            T[i] = (rgb[0] + rgb[1] + rgb[2])*255/(sum *3);
        }
        //循环每一个像素,取原图的像素值作为新图像的下标值 
        Mat newImg(rows, cols, CV_8UC3);
        for (int i = 0; i < rows; i++) {
            for (int j = 0; j < cols; j++) {
                /*newImg.at<Vec3b>(i, j)[0] = B[src.at<Vec3b>(i, j)[0]];
                newImg.at<Vec3b>(i, j)[1] = G[src.at<Vec3b>(i, j)[1]];
                newImg.at<Vec3b>(i, j)[2] = R[src.at<Vec3b>(i, j)[2]];*/
                newImg.at<Vec3b>(i, j)[0] = T[src.at<Vec3b>(i, j)[0]];
                newImg.at<Vec3b>(i, j)[1] = T[src.at<Vec3b>(i, j)[1]];
                newImg.at<Vec3b>(i, j)[2] = T[src.at<Vec3b>(i, j)[2]];
            }
        }
        return newImg;
    }
    int main()
    {
        Mat img, result;
    
        img = imread("xxx.bmp", IMREAD_COLOR);
        namedWindow("Result", WINDOW_AUTOSIZE);
        namedWindow("Origin", WINDOW_AUTOSIZE);
        result = Histogramequalization(img);
        if (result.empty())
        {
            cout << "Error! THE IMAGE IS EMPTY.." << endl;
            return -1;
        }
        else
        {
            imshow("Origin", img);
            imshow("Result", result);
        }
        waitKey(0);
        return 0;
    }
    
    展开全文
  • %直方图均衡化,这一个函数就可以做到均衡化的效果 figure, subplot(121),imshow(uint8(G)); title('原图') subplot(122),imshow(uint8(J)); title('均衡化后') figure, subplot(121),imhist(G,64); title('原图像...

    第一种(直接调用Matlab内置函数):

    G=imread('Fig0111(katrina_2005_08_29_NOAA).tif');
    J=histeq(G);  %直方图均衡化,这一个函数就可以做到均衡化的效果
    figure,
    subplot(121),imshow(uint8(G));
    title('原图')
    subplot(122),imshow(uint8(J));
    title('均衡化后')
    figure,
    subplot(121),imhist(G,64);
    title('原图像直方图');
    subplot(122),imhist(J,64);
    title('均衡化后的直方图');
    

    运行结果:

    请添加图片描述

    第二种(自己编写):

    % 输入图像
    H = imread('Fig0111(katrina_2005_08_29_NOAA).tif');
    
    [m,n]=size(H);       % 计算图像的长宽
    p=zeros(1,256);     %创建数组存储像素概率
    % 统计每个像素值出现的概率, 得到概率直方图
    for i=0:255
       % 用length函数计算相同像素的个数
       p(i+1)=length(find(H==i))/(m*n);  
    end 
    
    %输出原图
    subplot(2,2,1);      %用subploy函数将多个图像画到同一个平面中
    imshow(H);          %输出图像
    title('原图');
    %画出原图直方图
    subplot(2,2,2);  
    bar(0:255,p,'b');  
    title('原图直方图');  
    
    % 求累计概率,得到累计直方图
    s=zeros(1,256);  
    for i=1:256  
         for j=1:i  
             s(i)=p(j)+s(i);                  
         end  
    end  
     
    %完成每个像素点的映射
    a=round(s*255);  
    b=H;  
    for i=0:255  
         b(H==i)=a(i+1);                
    end 
    
    %输出均衡化后的图像
    subplot(2,2,3);  
    imshow(b)                            
    title('均衡化后图像');  
    
    for i=0:255  
        GPeq(i+1)=sum(p(a==i));            
    end
    %画出均衡化后的直方图
    subplot(2,2,4);  
    bar(0:255,GPeq,'b'); 
    title('均衡化后的直方图');  
    
    

    运行结果:
    请添加图片描述

    展开全文
  • ②对图像进行直方图均衡化处理,并显示结果图像及其直方图; ③比较直方图均衡化前后的图像及其直方图。 二、原理 直方图均衡化是通过对原图像进行某种变换使原图像的灰度直方图修正为均匀的直方图的一种方法。 三、...

    一、原理

    直方图均衡化是通过对原图像进行某种变换使原图像的灰度直方图修正为均匀的直方图的一种方法。

    二、步骤

    ①读入原图像huafen.jpg,并显示图像及其直方图;
    ②对图像进行直方图均衡化处理,并显示结果图像及其直方图;
    ③比较直方图均衡化前后的图像及其直方图。

    三、实验图像

    huafen.jpg

    huafen.jpg
    将图像保存到路径:D:\huafen.jpg

    四、框图

    框图

    五、代码

    %------------------------------------------------------------------------
    % File name:           first
    % Last modified Date:  2021年6月7日17点30分
    % Author:              Jasmine
    % Descriptions:        直方图均衡化
    %------------------------------------------------------------------------
    
    %清空工作区
    clc,clear,close all;
    %读入原图像
    huafen = imread('D:\huafen.jpg');
    %将原图像转换为灰度图
    [R, C] = size(huafen)
    %显示原图像
    subplot(3,2,1);imshow(huafen);title('原图');
    %获取直方图并显示
    subplot(3,2,2);imhist(huafen);title('直方图');
    %对原始图像进行histeq直方图均衡化处理
    h = histeq(huafen);
    %显示histeq直方图均衡化后的图
    subplot(3,2,3);imshow(h);title('histeq直方图均衡化之后的图');
    %显示histeq直方图均衡化后的直方图
    subplot(3,2,4);imhist(h);title('histeq直方图均衡化之后的直方图');
    %对原始图像进行adapthisteq直方图均衡化处理
    h = adapthisteq(huafen);
    %显示histeq直方图均衡化后的图
    subplot(3,2,5);imshow(h);title('adapthisteq直方图均衡化之后的图');
    %显示histeq直方图均衡化后的直方图
    subplot(3,2,6);imhist(h);title('adapthisteq直方图均衡化之后的直方图');
    

    六、运行结果

    直方图均衡化运行结果

    直方图均衡化运行结果
    展开全文
  • 此程序可用于理解数字图像处理时的直方图均衡化的问题
  • 数字图像处理直方图均衡化源码,基于matlab平台
  • 直方图均衡化(Histogram Equalization)是图像处理领域中利用图像直方图对对比度进行调整的方法。这种方法通常用来增加许多图像的局部对比度,尤其是当图像的有用数据的对比度相当接近的时候。通过这种方法,亮度...
  • 编程实现彩色图像直方图均衡化处理。要求给出原始图像的直方图、均衡化图像及其直方图和直方图均衡化时所用的灰度级变换曲线图。
  • 自己编的matlab程序 实现跟自带 histeq 相同的功能,带直方图对比
  • 本文主要阐述了本次作业中解决的四个问题,分别是灰度处理,直方图均衡化,直方图规定话GML,SML 一、图像预处理 1.1颜色转换意义 在图像处理过程中,我们日常的环境通常获得的是彩色图像,。一般为了减小图像原始...
  • 基于DSP的直方图均衡化处理。
  • ----------------------------------为简化问题,仅讨论灰度图像直方图均衡。设输入图像为二元函数 f(x, y) ,输出图像为二元函数 g(x, y),显然二者尺寸相等。我们知道,那些灰度值分布较为平均的图像,通常对比...
  • 直方图 像这样形状的数据统计图就叫做直方图。 不严谨的来说,簇状柱状图也可以看成直方图,我们之后不进行区别。 灰度直方图 横轴为灰度值,纵轴为灰度值在图中的频数。 e.g. 如下图 设灰度级为2,最大灰度值为1...
  • 我课程设计认真做的,包括算法实现和实验步骤,很有用~~
  • 请用MATLAB或其它语言编写相关程序,输入一幅灰度图像。  (1)按比例降低整幅图像灰度;... (2)对降低灰度后的图像进行直方图均衡化处理;  (3)在同一个窗口输出显示原始图像和2种结果图像
  • 函数可以对彩色图像进行直方图均衡,它以多维图像作为输入,并以多维形式生成输出。
  • 数字图像处理---直方图均衡化

    千次阅读 2018-03-11 13:06:13
    直方图均衡化的英文名称是Histogram Equalization. 图像对比度增强的方法可以分成两类:一类是直接对比度增强方法;另一类是间接对比度增强方法。直方图拉伸和直方图均衡化是两种最常见的间接对比度增强方法。直方图...
  • 图像直方图均衡化C++实现

    热门讨论 2013-06-26 11:23:39
    数字图像处理课程,直方图均衡化C++代码的实现
  • 文章目录直方图均衡化数字图像什么图像里面的直方图?归一化 直方图均衡化 数字图像 数字图像这个概念我想大家都应该有些概念,以前的相片都是通过相机使用胶片来曝光,胶片上面的感光物质,当光线照射到上面的时候...
  • 直方图 ...直方图均衡化就是将一已知概率密度分布的图像,经过某种变换变成一幅均匀概率密度分布的新图像,其结果为扩展了象元取值的动态范围,从而达到增强图像对比度的效果 直方图均衡化原理 ht...
  • 数字图像处理实验(1)——直方图均衡化 实验题目: 编程实现灰度和彩色图像的直方图均衡化处理。要求给出原始图像的直方图、均衡化图像及其直方图和直方图均衡化时所用的灰度级变换曲线图。注意彩色图像需要编程...
  • 在熟悉直方图均衡化的数学原理以及数字图像下直方图均衡化步骤基础上,能够利用python语言编写图像直方图均衡化算法。注意,不能简单使用exposure模块中的equalize_hist()函数来完成直方图均衡化,需自己编写直方图...
  • 本文在上一节学习点运算与直方图的基础上,介绍了对直方图进行处理的一种新方法:直方图均衡化。从定义、作用、计算方式和代码实现等多方面,系统地讲解了直方图均衡化处理。

空空如也

空空如也

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

数字图像直方图均衡化