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直方图均衡化实现》对你有帮助,请点赞、收藏,并留下你的观点哦!