失眠网,内容丰富有趣,生活中的好帮手!
失眠网 > matlab直方图均衡化实现

matlab直方图均衡化实现

时间:2022-04-02 19:26:00

相关推荐

matlab直方图均衡化实现

matlab直方图均衡化实现

直方图均衡化原理malab实现与matlab函数对比

直方图均衡化原理

以下是个人对直方图均衡化的理解,只做参考。如有问题请前辈们指正:直方图均衡化的目的是为了提升图像对比度,采用的方式是将一幅图像的直方图分布尽可能地变成近似分布。参考公式资源比较多,个人推荐参考一下文章(/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_xfor Y = 1:size_ynum_y = pic_city(X,Y)+1;num_map(1,num_y) = num_map(1,num_y) + 1;endend%获取新的映射表new_num = 0;for Z = 1:256new_num = num_map(1,Z) + new_num;hist_map(1,Z) = 256*new_num/(size_x*size_y);endhist_map = uint8(hist_map);%像素值重新映射hist_pic = uint8(zeros(size_x,size_y));for X1 = 1:size_xfor Y1 = 1:size_ydeel_val = pic_city(X1,Y1)+1;hist_pic(X1,Y1) = hist_map(1,deel_val);endendfigure(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

处理后的效果

可以看出对于对比度的提升是有一定的作用的,我的测试中对第一幅的处理效果较差,第二幅图效果较好,感兴趣的同学可以试试别的图片。接下来我会对该算法进行优化修改,并将原理、代码、效果写在往后的文章中

如果觉得《matlab直方图均衡化实现》对你有帮助,请点赞、收藏,并留下你的观点哦!

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。