数字图像处理,经典对比度增强算法

数字图像处理,经典对⽐度增强算法
关于图像增强必须清楚的基本概念
1.图像增强的⽬的:
1)改善图像的视觉效果,
2)转换为更适合于⼈或机器分析处理的形式
3)突出对⼈或机器分析有意义的信息
4)抑制⽆⽤信息,提⾼图像的使⽤价值
5)增强后的图像并不⼀定保真
2,图像增强的⽅法分类:
1)从处理对象分类:灰度图像,(伪)彩⾊图像
2)从处理策略分类:全局处理,局部处理(ROI ROI,Region of Interest Interest)
dst指数3)从处理⽅法分类:空间域(点域运算,即灰度变换;邻域⽅法,即空域滤波),频域⽅法
4)从处理⽬的分类:图像锐化,平滑去噪,灰度调整(对⽐度增强)
3,图像增强的⽅法之对⽐度增强
1)灰度变换法
线性变换(已实现)
对数变换(已实现)
指数变换(已实现)
2)直⽅图调整法
直⽅图均衡化(已实现)
直⽅图匹配(未实现)
⼀,直⽅图均衡化
直⽅图均衡化的英⽂名称是Histogram Equalization.
  图像对⽐度增强的⽅法可以分成两类:⼀类是直接对⽐度增强⽅法;另⼀类是间接对⽐度增强⽅法。直⽅图拉伸和直⽅图均衡化是两种最常见的间接对⽐度增强⽅法。直⽅图拉伸是通过对⽐度拉伸对直⽅图进⾏调整,从⽽“扩⼤”前景和背景灰度的差别,以达到增强对⽐度的⽬的,这种⽅法可以利⽤线性或⾮线性的⽅法来实现;直⽅图均衡化则通过使⽤累积函数对灰度值进⾏“调整”以实现对⽐度的增强。
  直⽅图均衡化处理的“中⼼思想”是把原始图像的灰度直⽅图从⽐较集中的某个灰度区间变成在全部灰度范围内的均匀分布。直⽅图均衡化就是对图像进⾏⾮线性拉伸,重新分配图像像素值,使⼀定灰度范围内的像素数量⼤致相同。直⽅图均衡化就是把给定图像的直⽅图分布改变成“均匀”分布直⽅图分布。
  缺点:
  1)变换后图像的灰度级减少,某些细节消失;
  2)某些图像,如直⽅图有⾼峰,经处理后对⽐度不⾃然的过分增强。
  直⽅图均衡化是图像处理领域中利⽤图像直⽅图对对⽐度进⾏调整的⽅法。
  这种⽅法通常⽤来增加许多图像的局部对⽐度,尤其是当图像的有⽤数据的对⽐度相当接近的时候。通过这种⽅法,亮度可以更好地在直⽅图上分布。这样就可以⽤于增强局部的对⽐度⽽不影响整体的对⽐度,直⽅图均衡化通过有效地扩展常⽤的亮度来实现这种功能。
  这种⽅法对于背景和前景都太亮或者太暗的图像⾮常有⽤,这种⽅法尤其是可以带来X光图像中更好的⾻骼结构显⽰以及曝光过度或者曝光不⾜照⽚中更好的细节。这种⽅法的⼀个主要优势是它是⼀个相当直观的技术并且是可逆操作,如果已知均衡化函数,那么就可以恢复原始的直⽅图,并且计算量也不⼤。这种⽅法的⼀个缺点是它对处理的数据不加选择,它可
能会增加背景杂讯的对⽐度并且降低有⽤信号的对⽐度。
关于编程实现,同样是不调⽤matlab库函数,⾃⼰编程实现。这样可以更深刻地理解直⽅图均衡化技术,提⾼编程能⼒。实现代码(matlab):
clc;
close all;
clear all;
src_img = imread('flyman_gray.bmp');
figure (1)
subplot(321),imshow(src_img),title('原图像');%显⽰原始图像
subplot(322),imhist(src_img),title('原图像直⽅图');%显⽰原始图像直⽅图
matlab_eq=histeq(src_img);        %利⽤matlab的函数直⽅图均衡化
subplot(323),imshow(matlab_eq),title('matlab直⽅图均衡化原图像');%显⽰原始图像
subplot(324),imhist(matlab_eq),title('matlab均衡化后的直⽅图');%显⽰原始图像直⽅图
dst_img=myHE(src_img);            %利⽤⾃⼰写的函数直⽅图均衡化
subplot(325),imshow(dst_img),title('⼿写均衡化效果');%显⽰原始图像
subplot(326),imhist(dst_img),title('⼿写均衡化直⽅图');%显⽰原始图像直⽅图
直⽅图均衡化函数的实现:
function dst_img=myHE(src_img)
[height,width] = size(src_img);
dst_img=uint8(zeros(height,width));
%进⾏像素灰度统计;
NumPixel = zeros(1,256);%统计各灰度数⽬,共256个灰度级
for i = 1:height
for j = 1: width
NumPixel(src_img(i,j) + 1) = NumPixel(src_img(i,j) + 1) + 1;%对应灰度值像素点数量增加⼀    end
end
%计算灰度分布密度
ProbPixel = zeros(1,256);
for i = 1:256
ProbPixel(i) = NumPixel(i) / (height * width * 1.0);
end
%计算累计直⽅图分布
CumuPixel = zeros(1,256);
for i = 1:256
if i == 1
CumuPixel(i) = ProbPixel(i);
else
CumuPixel(i) = CumuPixel(i - 1) + ProbPixel(i);
end
end
% 指定范围进⾏均衡化
% pixel_max=max(max(I));
% pixel_min=min(min(I));
pixel_max=255;
pixel_min=0;
%对灰度值进⾏映射(均衡化)
for i = 1:height
for j = 1: width
dst_img(i,j) = CumuPixel(src_img(i,j)+1)*(pixel_max-pixel_min)+pixel_min;
end
end
return;
为什们和matlab的直⽅图不⼀样呢
⼆,指数变换
指数变换(Power-Law )的公式:S=c*R^r,通过合理的选择c和r可以压缩灰度范围,算法以c=1.0/255.0, r=2实现。
增强效果展⽰:可以看见,改增强算法并不能很好的将像素尽可能的碾平。
指数增强参考程序为:
clc;
close all;
clear all;
% -------------Gamma Transformations-----------------
%f = imread('Fig0316(4)(bottom_left).tif');
f = imread('seed.tif');
Gamma = 0.4;
g2 = myExpEnhance(f,Gamma);
figure();
subplot(221);  imshow(f);  xlabel('a).Original Image');
subplot(222),imhist(f),title('原图像直⽅图');%显⽰原始图像直⽅图
subplot(223);  imshow(g2);  xlabel('b).Gamma Transformations \gamma = 0.4');
subplot(224),imhist(g2),title('增强图像直⽅图');%显⽰原始图像直⽅图
指数增强核⼼函数为:
function dst_img=myExpEnhance(src_img,Gamma)
src_img = mat2gray(src_img,[0 255]);%将图像矩阵A中介于amin和amax的数据归⼀化处理,其余⼩于amin的元素都变为0,⼤于amax的元素都变为1。
C = 1;
g2 = C*(src_img.^Gamma);
%反归⼀化
max=255;
min=0;
dst_img=uint8(g2*(max-min)+min);
三,对数变换

本文发布于:2024-09-20 22:30:22,感谢您对本站的认可!

本文链接:https://www.17tex.com/tex/4/379697.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:图像   灰度   均衡化   处理   增强
留言与评论(共有 0 条评论)
   
验证码:
Copyright ©2019-2024 Comsenz Inc.Powered by © 易纺专利技术学习网 豫ICP备2022007602号 豫公网安备41160202000603 站长QQ:729038198 关于我们 投诉建议