MATLAB Write your own equalization function

Practice:

1.Try it,and display it on the screen.

 实现方式:

RGB = imread('night.jpg');
I = rgb2gray(RGB);
Hist = imhist(I);
Min = min(Hist);
Max = max(Hist);
E = I .* 1.5;
subplot(2,2,1);
imshow(I);
subplot(2,2,2);
imshow(E);
subplot(2,2,3);
imhist(I);
subplot(2,2,4);
imhist(E);

接下来,用histeq函数做一下对比:

 实现方式:

RGB = imread('night.jpg');
I = rgb2gray(RGB);
E = histeq(I);
subplot(2,2,1);
imshow(I);
subplot(2,2,2);
imshow(E);
subplot(2,2,3);
imhist(I);
subplot(2,2,4);
imhist(E);

咦?原来这才是均衡化,修改一下实现方式:

具体代码如下:

RGB = imread('night.jpg');
II = rgb2gray(RGB);

[m,n]=size(II); 
f1 = im2uint8(ones(m,n));
% matlab读入图像的数据是uint8,
% 而matlab中数值一般采用double型(64位)存储和运算。
% 把图像数据类型转换为无符号八位整型
% 得到输入图像的直方图h
h = imhist(II);
% 获取直方图的横坐标和纵坐标,即各个像素级,以及每个像素级上的像素出现的次数
I = length(h);
% 最大数组维度的长度

PDF = h/numel(II);
% 数组元素的数目
%概率密度PDF
CDF = cumsum(PDF);
% 累积和
%分布函数CDF
j = CDF .* 256;
%取整扩展,得到均衡化之后的灰度分布直方图
J = round(j);
% 灰度级数取整
%将扩展后的灰度级数对应映射到图片中
for i = 1 : I
    nn = find(J == i);
    %找出扩展后的灰度级数对应的扩展前的灰度级数
    %find返回的是位置
    L = length(nn);
    for k = 1: L
        nn1 = find(II ==(nn(k)- 1));
        %再找到扩展前的灰度级数对应的像素点
        f1(nn1) = i;
        %并将像素点对应灰度值值置为扩展后的灰度值
    end
end

subplot(2,2,1);
imshow(II);
subplot(2,2,2);
imshow(f1);
subplot(2,2,3);
imhist(II);
subplot(2,2,4);
imhist(f1);

参考:羽化成麟没有小白龙的博客

网址连接:histeq从用法到原理——Matlab直方图均衡化函数_羽化成麟没有小白龙_新浪博客

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值