matlab直方图均衡化实现

直方图均衡化原理

    以下是个人对直方图均衡化的理解,只做参考。如有问题请前辈们指正:

    直方图均衡化的目的是为了提升图像对比度,采用的方式是将一幅图像的直方图分布尽可能地变成近似分布。
参考公式资源比较多,个人推荐参考一下文章(https://zhuanlan.zhihu.com/p/44918476)

malab实现

  以下是个人代码。
clc;
clear all;

%从文件夹中读取两幅图片,并进行RGB到灰度的变换
pic_moon = imread('pic\moon.jpg');
pic_city = imread('pic\city.jpg');
pic_moon = rgb2gray(pic_moon);
pic_city = rgb2gray(pic_city);


%显示一张图片
figure(1);
imshow(pic_city);

%获取pic_moon的图片信息,主要是宽与高的像素数
[size_x,size_y] = size(pic_moon);

%创建两个全零数组,第一个用来存放变换后的映射表,第二个用来存放0-255每个像素的数量和
hist_map = zeros(1,256);
num_map	= zeros(1,256);

%个人测试信号,可忽略
test = 0;
%计算值为0-255的像素个数(非0-255总数,是0的总数、1的总数、2的总数。。。。。)
for X = 1:size_x
	for Y = 1:size_y
		num_y = pic_city(X,Y)+1;
        num_map(1,num_y) = num_map(1,num_y) + 1;
	end
end


%获取新的映射表
new_num = 0;
for Z = 1:256
	new_num = num_map(1,Z) + new_num;
	hist_map(1,Z) = 256*new_num/(size_x*size_y);
end
hist_map = uint8(hist_map);


%像素值重新映射
hist_pic = uint8(zeros(size_x,size_y));
for X1 = 1:size_x
	for Y1 = 1:size_y
		deel_val = pic_city(X1,Y1)+1;
        hist_pic(X1,Y1) = hist_map(1,deel_val);
	end
end

figure(2);
imshow(hist_pic);
figure(3);
imshow(histeq(hist_pic));

figure(4);
imhist(pic_city);
figure(5);
imhist(hist_pic);
figure(6);
imhist(histeq(hist_pic));






与matlab函数对比

原图:1在这里插入图片描述
matlab histeq 函数效果在这里插入图片描述
我的算法效果
在这里插入图片描述
原图2
在这里插入图片描述
处理后的效果
在这里插入图片描述

   可以看出对于对比度的提升是有一定的作用的,我的测试中对第一幅的处理效果较差,第二幅图效果较好,感兴趣的同学可以试试别的图片。
   接下来我会对该算法进行优化修改,并将原理、代码、效果写在往后的文章中
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值