数字图像处理--(02)数字图像的增强之灰度转换(点运算)(MATLAB)

简介: 数字图像处理--(02)数字图像的增强之灰度转换(点运算)(MATLAB)

图像增强技术 是一大类基本的图像处理技术 , 其目的是对图像进行加工 , 以得到对具体应用来说视觉效果更 “ 好 ” 、 更 “ 有用 ” 的图像 。

目标: 改善图像视觉效果,便于观察和分析,便于人工或机器对图像的进一步处理。

标准: 相当主观 , 因人而异,没有完全通用的标准,可以有一些相对一致的准则。

图像空域增强


图像处理中 , 空域 是指由像素组成的空间 , 也就是图像域

空域增强方法指 直接作用于像素改变其特性的增强方法 。 具体的增强操作可仅定义在每个像素位置( (x x, , y y) ) 上 ,此时称为 点操作 ;增强操作还可定义在每个( (x x, , y y) ) 的某个邻域上 , 此时常称为 模板操作或邻域操作。

点处理 是作用于单个像素的空间域处理方法,包括图像灰度变换、直方图处理、伪彩色处理等技术;

模板处理 是作用于像素邻域的处理方法,包括空域 平滑、空域锐化等技术。

图像直接灰度转换


灰度变换也被称为图像的点运算(只针对图像的某一像素点)是所有图像处理技术中最简单的技术,其变换形式如下:

s=T(r)

其中,T是灰度变换函数;r是变换前的灰度;s是变换后的像素。

图像灰度变换的有以下作用:

  • 改善图像的质量,使图像能够显示更多的细节,提高图像的对比度(对比度拉伸)
  • 有选择的突出图 像感兴趣的特征或者抑制图像中不需要的特征
  • 可以有效的改变图像的直方图分布,使像素的分布更为均匀

线性灰度变换-截取和分段式(一次函数式)


线性灰度变换函数是一个线性函数:B=f(A)=kA+b.其中A为输入图像灰度值,B为输出图像灰度,a为线性函数的斜率,c为在Y轴的截距。

当a>1时,输入图像的对比度将增大,当a<1时,输出图像的对比度将减小;

当a=1时且c≠0时,c的变换仅使所有的灰度值上移或者下移,其效果使整个图像更暗或更亮,当a<0时暗区域将变亮,亮区域将变暗。这种线性变换可能由于像素达到饱和(小于0或者超过255)从而丢失一部分细节;

特殊情况a=1,c=0输入图像和输出图像相同;a=-1,c=255输出图像的灰度正好反转

k>1 增大图像的对比度,图像的像素值在变换后全部增大,整体效果被增强
k=1 通过调整b,实现对图像亮度的调整
0<k<1 图像的对比度被削弱
k<0 原来图像亮的区域变暗,原来图像暗的区域变亮

imadjust


J = imadjust(I)

将灰度图像 I 中的亮度值映射到 J 中的新值并使 1% 的数据是在低高强度和饱和,这增加了输出图像 J 的对比度值。此用法相当于 imadjust(I,stretchlim(I))

J = imadjust(I,[low_in; high_in],[low_out; high_out])

将图像I中的亮度值映射到J中的新值,即将low_in至high_in之间的值映射到low_out至high_out之间的值。low_in 以下与 high_in 以上的值被剪切掉了,也就是说,low_in 以下的值映射到 low_out,high_in 以上的值映射到high_out。它们都可以使用空的矩阵[],默认值是[0 1]。

J = imadjust(I,[low_in; high_in],[low_out; high_out],gamma)

将图像 I 中的亮度值映射到 J 中的新值,其中 gamma指定描述值I和值J关系的曲线形状。如果gamma小于1,此映射偏重更高数值(明亮)输出,如果gamma大于1,此映射偏重更低数值(灰暗)输出,如果省略此参数,默认为(线性映射)。

clc;
clearall;closeall;
img=imread('pout.tif');
o_img=imadjust(img,[0.30.6],[01]);
subplot(1,2,1);imshow(img);
subplot(1,2,2);imshow(o_img);

效果

image.png

线性灰度变换­—图像反转


灰度线性变换最常见的就是图像反转,在灰度图像灰度级范围image.png中,其反转的公式如下所示:

image.png

其中,表示原始图像的灰度级,表示变换后的灰度级。

反转法一:


i=imread('reverse.jpg');
%I=im2gray(i);
I1=255-i;
imshow(I1);

反转法二:


使用函数:

incomplement

调用格式:

IM2 = imcomplement(IM)  函数功能: 对图像数据进行取反运算(实现底片效果)。

参数说明: IM是源图像的数据, IM2是取反后的图像数据。

一个简单的例子:

X=uint8([ 2551075; 44225100]); 
X2=imcomplement(X)
X2=024518021130155

注意点:

  1. 图像文件中用uint8来表示256级灰度。 对于真彩色位图, 一个像素用3个uint8分别表示该像素的R、G、B分量。
  2. uint8表示的数据范围: 0~255。图像的底片效果便是拿255 减去原图像数据。
    代码:
clc;
clearall;closeall;
img=imread('../img1.jpg');
o_img=imcomplement(img);
subplot(1,2,1);imshow(img);
subplot(1,2,2);imshow(o_img);

image.png

非线性变换:


图像灰度对数变换一般表示如下所示:

image.png

其中,表示原始图像的灰度级,表示变换后的灰度级,为常数。

假设,下图所示的对数曲线的形状表明,改变换将输入中范围较窄的低灰度值映射为输出中较宽范围的灰度值。相反的,对高的输入灰度值也是如此。我们使用这种类型的变换来扩展图像中暗像素的值,同时压缩更高灰度级的值。反对数变换的作用与此相反。

image.png

对数变换


对数变换主要用于将图像的低灰度值部分扩展,将其高灰度值部分压缩,
以达到强调图像低灰度部分的目的。增加图片细节。

对数变换的 实质 : 将一幅窄带低灰度输入图像映射为一宽带输出图像

变换方法由下式给出。

image.png

image.png

底数越大,对低灰度部分的强调就越强,对高灰度部分的压缩也就越强。相反的,如果想强调高灰度部分,则用反对数函数就可以了。

clc;
clearall;closeall;
img=imread('../gray1.jpg');
D=double(img);
D_1=10*(log(D+1));
o_img=uint8(D_1);
subplot(1,2,1);imshow(img);title("原始图像");
subplot(1,2,2);imshow(o_img);title("输出图像");

image.png

伽马变换


伽玛变换又称为 指数变换 或 幂次变换,是另一种常用的灰度非线性变换。
图像灰度的伽玛变换一般表示如下所示

其中,表示原始图像的灰度级,表示变换后的灰度级,和正常数

1)当>1时,会拉伸图像中灰度级较高的区域,压缩灰度级较低的部分;

2)当<1时,会拉伸图像中灰度级较低的区域,压缩灰度级较高的部分;

3)当=1时,该灰度变换是线性的,此时通过线性方式改变原图像。

image.png

clc;
clearall;closeall;
img=imread('../gray1.jpg');
img=rgb2gray(img);
img=double(img);
C=1;
gamma=0.4;
o_img1=C*(img.^gamma);
gamma=1;
o_img2=C*(img.^gamma);
gamma=10;
o_img3=C*(img.^gamma);
img=uint8(img);
o_img1=uint8(o_img1);
o_img2=uint8(o_img2);
o_img3=uint8(o_img3);
subplot(2,2,1);imshow(img);title("原始图像");
subplot(2,2,2);imshow(o_img1);title("输出图像gamma=0.4");
subplot(2,2,3);imshow(o_img2);title("输出图像gamma=1");
subplot(2,2,4);imshow(o_img3);title("输出图像gamma=10");

image.png

目录
相关文章
|
6月前
|
算法 计算机视觉 异构计算
基于FPGA的图像差分运算及目标提取实现,包含testbench和MATLAB辅助验证程序
基于FPGA的图像差分运算及目标提取实现,包含testbench和MATLAB辅助验证程序
|
22天前
|
Serverless
MATLAB中的矩阵与向量运算
【10月更文挑战第2天】本文全面介绍了MATLAB中的矩阵与向量运算,包括基本操作、加减乘除、转置、逆矩阵、行列式及各种矩阵分解方法。通过丰富的代码示例,展示了如何利用矩阵运算解决线性方程组、最小二乘法拟合、动态系统模拟和电路分析等问题。掌握这些运算不仅提升编程效率,还能在工程计算和科学研究中发挥重要作用。
33 1
|
6月前
|
Serverless 索引
matlab--------矩阵的运算
matlab--------矩阵的运算
54 1
matlab--------矩阵的运算
|
6月前
|
计算机视觉
数字图像处理笔记(一)Matlab实现直方图均衡化
数字图像处理笔记(一)Matlab实现直方图均衡化
|
数据可视化 索引
MATLAB--控制语句--数组操作--符号运算--绘图--文件和数据的处理(二)
MATLAB--控制语句--数组操作--符号运算--绘图--文件和数据的处理
106 0
|
6月前
|
数据可视化
第七章:MATLAB基本运算符号解析及案例详解
第七章:MATLAB基本运算符号解析及案例详解
98 1
|
6月前
|
机器学习/深度学习 存储 算法
毕业论文:基于matlab的数字图像分割技术研究及实现(分享需要的同学)
毕业论文:基于matlab的数字图像分割技术研究及实现(分享需要的同学)
194 0
|
12月前
专题一MATLAB基础知识——1.6MATLAB基本运算
专题一MATLAB基础知识——1.6MATLAB基本运算
74 0
|
算法 文件存储
MATLAB--控制语句--数组操作--符号运算--绘图--文件和数据的处理(三)
MATLAB--控制语句--数组操作--符号运算--绘图--文件和数据的处理
165 0