zoukankan      html  css  js  c++  java
  • matlab 直方图均衡化(含rgb)

    步骤:

    统计原图像素每个像素的个数

    统计原图像<每个灰度级的像素的累积个数

    家里灰度级得映射规则

    将原图每个像素点的灰度映射到新图


    代码:

    1. clear all  
    2. I=imread('1.jpg');                 %读入JPG彩色图像文件  
    3. imshow(I)                                  %显示出来   
    4. title('输入的彩色JPG图像')  
    5. I_gray = rgb2gray(I); %灰度化后的数据存入数组  
    6. imwrite(I_gray,'1_gray.bmp'); %保存灰度图像  
    7. figure,imshow(I_gray);  
    8. title('灰度图')  
    9.   
    10. [height,width]=size(I_gray);  %测量图像尺寸参数  
    11. p=zeros(1,256);                            %预创建存放灰度出现概率的向量  
    12. for i=1:height  
    13.     for j=1:width  
    14.      p(I_gray(i,j) + 1) = p(I_gray(i,j) + 1)  + 1;  
    15.     end  
    16. end  
    17. s=zeros(1,256);  
    18. s(1)=p(1);  
    19. for i=2:256  
    20.      s(i)=p(i) + s(i-1); %统计图像中<每个灰度级像素的累积个数,s(i):0,1,```,i-1  
    21. end  
    22.   
    23. for i=1:256  
    24.     s(i) = s(i)*256/(width*height); %求灰度映射函数  
    25.     if s(i) > 256  
    26.         s(i) = 256;  
    27.     end  
    28. end  
    29.   
    30. %图像均衡化  
    31. I_equal = I;  
    32. for i=1:height  
    33.     for j=1:width  
    34.      I_equal(i,j) = s( I(i,j) + 1);  
    35.     end  
    36. end  
    37. figure,imshow(I_equal)                           %显示均衡化后的图像   
    38. title('均衡化后图像')  
    39. imwrite(I_equal,'1_equal.bmp');  

    实现结果如下:

    原图                                                                       灰度图                                                                    均衡化后




    亲们,是这样么?!是这样么?!!肿么会是这样的呢~~~~~~~惊讶


    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~是不是错了?彩色图像的均值化到底肿么弄涅~~

    对于灰度图的均衡化,

    参考:http://blog.csdn.net/xiajun07061225/article/details/6910129

    1. %直方图均衡化    
    2. clear;  
    3. I = imread('mm_gaussian_gray.bmp');    
    4. [height,width] = size(I);    
    5. figure    
    6. subplot(221)    
    7. imshow(I)%显示原始图像    
    8. subplot(222)    
    9. imhist(I)%显示原始图像直方图    
    10.     
    11. %进行像素灰度统计;    
    12. s = zeros(1,256);%统计各灰度数目,共256个灰度级    
    13. for i = 1:height    
    14.     for j = 1: width    
    15.         s(I(i,j) + 1) = s(I(i,j) + 1) + 1;%对应灰度值像素点数量增加一    
    16.     end    
    17. end    
    18. %计算灰度分布密度    
    19. p = zeros(1,256);    
    20. for i = 1:256    
    21.     p(i) = s(i) / (height * width * 1.0);    
    22. end    
    23. %计算累计直方图分布    
    24. c = zeros(1,256);    
    25. c(1) = p(1);  
    26. for i = 2:256     
    27.         c(i) = c(i - 1) + p(i);    
    28. end    
    29. %累计分布取整,将其数值归一化为1~256   
    30. c = uint8(255 .* c + 0.5);    
    31. %对图像进行均衡化  
    32. for i = 1:height    
    33.     for j = 1: width    
    34.         I(i,j) = c(I(i,j)+1);    
    35.     end    
    36. end    
    37.   
    38. subplot(223)    
    39. imshow(I)%显示均衡化后的图像  
    40. subplot(224)    
    41. imhist(I)%显显示均衡化后的图像的直方图    


    参考  http://blog.csdn.net/xiajun07061225/article/details/6910129

  • 相关阅读:
    winsows10 小技巧
    数组与智能指针
    卸载 VS2015
    Effective C++
    修改 git commit 的信息
    线程管理
    并发编程简介
    个别算法详解
    git 删除某个中间提交版本
    git 查看某一行代码的修改历史
  • 原文地址:https://www.cnblogs.com/gaara-zhang/p/5465861.html
Copyright © 2011-2022 走看看