(二)空域图像增强:灰度点操作及MATLAB实现

空域指像素位置所在的空间,一般看作图像的原始空间。空域图像增强指直接作用于像素,在图像空间的增强。在空域增强中分为点操作和模板操作。点操作还可以分为几何点操作和灰度点操作。

灰度点操作通过改变像素的灰度值来改变图像获得增强效果。

灰度点操作

灰度点操作有较多的形式:例如将像素值根据算术或逻辑运算结合成新的像素值(图像间运算);将像素值根据某种函数关系进行映射得到新的像素值(图像灰度映射);根据一组像素值的统计结果进行映射来改变各个像素的像素值(直方图变换)。

图像间运算

图像间的运算指的是以图像为单位的操作(按数组方式进行),运算结果是一副新图像。基本运算主要包括算术运算和逻辑运算。对图像的算术运算和逻辑运算是逐像素进行的。

  1. 算术运算
    算术运算主要用于灰度图像。包括:
    加法:p+q;
    减法:p-q;
    乘法:p×q;
    除法:p÷q;
    通过相应的运算由两个像素的灰度值得到一个新的灰度值,作为输出图像中对应位置处的灰度值,算术运算后的结果会出现溢出的问题,此时需要进行图像灰度映射
    图像加法可用于图像平均以减少和去除图像采集中混入的噪声,提高图片亮度。
    图像减法可用于凸显两幅图像的差异,对于时间上相邻的两幅图像求差可检测图像中目标的变换信息。
    图像乘/除法可以校正由于照明或传感器的非均匀性所造成的图像明暗变化。
  2. 逻辑运算
    逻辑运算只用于二值(0,1)图像(如果是灰度图像,需要将灰度图像分解为二值图像集合)基本的逻辑运算包括:
    补:NOT q;
    与:p AND q;
    或:p OR q;
    异或:p XOR q;

图像灰度映射

图像由像素构成,视觉效果与像素的灰度相关。如果改变全部或部分像素的灰度,就可以改变图像的视觉效果。图像灰度映射要根据原始图像中每个像素的灰度值,按照某种映射规则直接将其转换成另一灰度值,从而达到增强图像视觉效果的目的。
在这里插入图片描述
典型的灰度映射有:

  1. 图像求反
    图像求反是一种将原图灰度值翻转的操作,普通黑白底片和照片的关系就是这样。
    t = (L - 1) - s:
    在这里插入图片描述
  2. 增强对比度
    增强图像对比度可通过增加图像中相邻各部分之间的灰度差别实现,具体可增加图像中某两个灰度值之间的动态范围。比如下图中灰度值在0 ~ S1 和S2 ~ L-1间的动态范围减少了,在S1 ~ S2 间的动态范围增加了,从而这个范围内的对比度就增加了。
    在这里插入图片描述
  3. 动态范围压缩
    动态范围压缩的目标与增强对比度的目标基本相反。有时原图的动态范围太大,会超出显示设备允许的动态范围,如果直接进行显示,则一部分细节可能会丢失,所以就对原图进行一定的灰度范围压缩。t = Clog(1+|s|),C为比例系数,恰当地选择可使压缩后的动态范围刚好全部显现。
    在这里插入图片描述

直方图变换

对于一幅灰度图像,其直方图反映了该图像中不同灰度级出现的统计情况,给出了一副图像所有灰度值的整体描述,直方图的均值和方差也是灰度图像的均值和方差,直方图的形状和改变对图像有很大影响。
直方图变换通过改变图像的直方图来改变图像中各像素的灰度值从而达到图像增强的效果,所以直方图变换也称为直方图修正。常用的方法有:

  1. 直方图均衡化
    直方图均衡化主要用于增强动态范围偏小的图像的对比度。
    直方图均衡化把原始图像的直方图变换为均匀分布的形式,这样就增加了像素之间灰度值差别的动态范围,从而达到增强图像整体对比度的效果。
    在这里插入图片描述
    直方图均衡化的增强函数EH(S)需要满足两个条件:
    (1)EH(S)在 0 ≤ s ≤ 1范围内是单值单增函数;
    (2)对于 0 ≤ s ≤ 1有 0 ≤ EH(S) ≤ 1;
    其中(1)保证了原始图像各灰度级在变换后仍然保持从黑到白(从白到黑)的排列次序;
    其中(2)保证了变换前后图像的灰度值动态范围保持一致性。
    另外,反变换s = EH-1(t) (0 ≤ t ≤ 1)也应该满足这两个条件。
    累积分布函数CDF满足上述两个条件,并且能将s转换为t的均匀分布。
  2. 直方图规定化
    直方图均衡化能自动地增强图像整体对比度,但实际增强的效果却不易控制,结果总是得到全局均衡化的直方图。实际中有时需要变换直方图使之成为某个需要的分布形状,这时可以采用更灵活的直方图规定化方法。
    直方图规定化方法要调整原始图像的直方图去逼近所规定的目标直方图。

MATLAB实现

%% 灰度点操作
% 图像间运算、灰度映射、直方图变换
clc,clear
I = imread('lenna1.jpg');
figure(1);subplot(1,2,1);imshow(I);title('原图像');
[M,N] = size(I);%获取原始图像大小
PSF = fspecial('motion',20,15);
I1 = imfilter(I,PSF,'conv','circular');
subplot(1,2,2);imshow(I1);title('模糊处理后图像');
Id = double(I);
I1d = double(I1);% 将uint8转换为double型,否则不能计算统计量
%% 图像间运算
% 算术运算加减
add = Id + I1d;
subtract = Id - I1d;
figure(2);subplot(1,2,1);imshow(uint8(add));title('相加');
subplot(1,2,2);imshow(uint8(subtract));title('相减');
%% 灰度映射
% 图像求反t = (L - 1) - s
% 方法1
I2d = (255 - 1) - Id;
% 方法2 imadjust
I3 = imadjust(I,[0 1],[1 0]);
figure(3);subplot(1,3,1);imshow(I);title('原图像');
subplot(1,3,2);imshow(uint8(I2d));title('图像求反1');
subplot(1,3,3);imshow(uint8(I2d));title('图像求反2');
%% 直方图变换
% 直方图均衡化 histeq
I4 = histeq(I);
figure(4);
subplot(2,2,1);
imshow(I);title('原图');
subplot(2,2,2);
imhist(I);title('原图直方图');
subplot(2,2,3);
imshow(I4);title('均衡化后图像');
subplot(2,2,4);
imhist(I4);title('均衡化后直方图');
% 累积分布函数
h = imhist(I) ./ numel(I);
cdf = cumsum(h);
h1 = imhist(I4) ./ numel(I4);
cdf1 = cumsum(h1);
x = linspace(0,1,256);
figure(5);
p1 = plot(x,cdf,x,cdf1);
legend([p1(1),p1(2)],'原累积分布函数','均衡化后累积分布函数');

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值