MATLAB图像处理

您所在的位置:网站首页 直方图均衡化实验步骤及结果 MATLAB图像处理

MATLAB图像处理

2024-07-15 10:05| 来源: 网络整理| 查看: 265

直方图均衡化这种方法通常用来增加许多图像的全局对比度,尤其是当图像的有用数据的对比度相当接近的时候。通过这种方法,亮度可以更好地在直方图上分布。这样就可以用于增强局部的对比度而不影响整体的对比度,直方图均衡化通过有效地扩展常用的亮度来实现这种功能。

这种方法对于背景和前景都太亮或者太暗的图像非常有用,这种方法尤其是可以带来X光图像中更好的骨骼结构显示以及曝光过度或者曝光不足照片中更好的细节。这种方法的一个主要优势是它是一个相当直观的技术并且是可逆操作,如果已知均衡化函数,那么就可以恢复原始的直方图,并且计算量也不大。这种方法的一个缺点是它对处理的数据不加选择,它可能会增加背景噪声的对比度并且降低有用信号的对比度。

代码中的直方图均衡化函数为自己编写,可参看:自己编写直方图均衡化函数

对RGB通道 通过这种方式取出RGB三通道,分别进行直方图均衡化,最后进行合成,再输出。

OutImg(:,:,1)=R; OutImg(:,:,2)=G; OutImg(:,:,3)=B;

完整的代码如下:

%% clc clear all I=imread('D:\提高文化修养的文件\数图处理\第三章图像增强 第1次作业\fireworks.jpg'); %% %%变化前灰度值 OutImg=I; R=I(:,:,1); subplot(2,3,1) imhist(R); title('R') G=I(:,:,2); subplot(2,3,2) imhist(G); title('G') B=I(:,:,3); subplot(2,3,3) imhist(B); title('B') %% %%变化后灰度值 R=hist_1(R); subplot(2,3,4) imhist(R); title('after R') G=hist_1(G); subplot(2,3,5) imhist(G); title('after G') B=hist_1(B); subplot(2,3,6) imhist(B); title('after B') %% %变化后图像 OutImg(:,:,1)=R; OutImg(:,:,2)=G; OutImg(:,:,3)=B; figure, imshow(I); title('原图像') figure, imshow(OutImg); title('直方图均衡化后的图像') %% %直方图均衡化函数 function hist_img = hist_1(I) [M, N] = size(I); size_img = M*N; c = zeros(1,256);%统计每个每个像素值的个数 b= c;%转化前后的对照表 temp = I(:); temp = sort(temp); for i = 1:size_img c(temp(i)+1) = c(temp(i)+1)+1; end a = c;%求和 for i = 2:256 a(i) = c(i) + a(i-1); end min_cdf = 10000; for i = 1:256 if a(i)>0 if a(i) < min_cdf min_cdf = a(i); end end end for j = 1:256 if a(j) > 0 b(j) = round(255*(a(j)-min_cdf)/(size_img-min_cdf)); end end for i = 1:M for j = 1:N I(i,j) = b(I(i,j)+1); end end hist_img = I; end

但是这种方式会对原来的颜色造成破坏,还会出现过曝等,适用性一般。 示例烟花图如下: ps:图片拍摄于湖南师范大学体育馆二楼,2019.10.1 示例 可以看出天空等出现了过曝,而且相应的颜色都有部分失真,特别是烟花附近过曝严重。

对HSV通道 HSV(Hue, Saturation, Value)是根据颜色的直观特性由A. R. Smith在1978年创建的一种颜色空间, 也称六角锥体模型(Hexcone Model)。 这个模型中颜色的参数分别是:色调(H),饱和度(S),明度(V)。 对于夜晚图像的增强,可以只对亮度通道进行增强。

通过rgb2hsv转换为hsv通道

通过hsv2rgb转换为rgb通道

V通道通常小于1,但是直方图均衡化为0-255,故: floor(v * 255) 变换后: v/255

综上代码如下:

%% clc clear all I=imread('D:\QQ接收文件夹\MobileFile\IMG_20191001_204030.jpg'); %% %%HSV OutImg=rgb2hsv(I); V=OutImg(:,:,3); V = floor(V * 255); %% %%变化后V V=hist_1(V); V = V / 255; %% %变化后图像 OutImg(:,:,3) = V; OutImg = hsv2rgb(OutImg); imshow(I); title('原图像') figure, imshow(OutImg); title('直方图均衡化后的图像') %% %直方图均衡化函数 function hist_img = hist_1(I) [M, N] = size(I); size_img = M*N; c = zeros(1,256);%统计每个每个像素值的个数 b= c;%转化前后的对照表 temp = I(:); temp = sort(temp); for i = 1:size_img c(temp(i)+1) = c(temp(i)+1)+1; end a = c;%求和 for i = 2:256 a(i) = c(i) + a(i-1); end min_cdf = 10000; for i = 1:256 if a(i)>0 if a(i) < min_cdf min_cdf = a(i); end end end for j = 1:256 if a(j) > 0 b(j) = round(255*(a(j)-min_cdf)/(size_img-min_cdf)); end end for i = 1:M for j = 1:N I(i,j) = b(I(i,j)+1); end end hist_img = I; end

对刚才的图像进行处理,结果如下: 示例 可以看出对色彩的还原比较高,但是在灯的附近还是出现了过曝,整体来说画面的亮度有了较大的提升,且下方的座椅效果很好,比RGB通道的直方图均衡化要好。适用于没有特别亮的暗色照片增强。

综合对比: 左边为RGB,右边为HSV 推荐使用HSV通道。 在这里插入图片描述

参考链接,可参看:自己编写直方图均衡化函数



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3