Matlab 图像分析之图像的基本运算
常见的图像基本运算有点运算,逻辑运算,代数运算以及几何运算。通过对图像进行运算可以更好的体现图像的特性,以便后续的图像分析处理。
点运算
点运算是指对一副图像中每个像素点的灰度值按一定的映射关系进行计算的方法。
点运算表达式:
g
(
x
,
y
)
=
T
[
f
(
x
,
y
)
]
g(x,y)=T[f(x,y)]
g(x,y)=T[f(x,y)]
其中T是对图像中的点值的数学运算。即像素的逐点运算,是灰度到灰度的映射过程。被称为灰度变换函数
点运算的分类:
点运算按灰度变换函数T的形式可以分为:线性灰度变换,分段灰度变换和非线性灰度变换。
1.线性灰度变换的Matlab实现:
线性灰度变换的灰度变换函数形式可表示为线性方程:
s
=
a
r
+
b
s=ar+b
s=ar+b
灰度压缩:
0
<
a
<
1
,
b
>
0
0<a<1,b>0
0<a<1,b>0
灰度扩展:
a
>
1
,
b
=
0
a>1,b=0
a>1,b=0
灰度压缩:
0
<
a
<
1
,
b
=
0
0<a<1,b=0
0<a<1,b=0
图像反转:
a
=
−
1
,
b
=
255
a=-1,b=255
a=−1,b=255
Matlab实现:
clc,clear,close all
%点运算代码
%1.灰度映射
I=imread("Image1.jpg");
I=rgb2gray(I);
figure('Name','原图');
imshow(I);
imwrite(I,'原图.jpg');
%运算函数为s=ar+b%
%灰度压缩 0<a<1,b>0%
I1=0.5.*I+1;
figure('Name','灰度压缩');
imshow(I1);
imwrite(I1,'灰度压缩.jpg');
%灰度扩展 a>1,b=0%
I2=2.*I+0;
figure('Name','灰度扩展');
imshow(I2);
imwrite(I2,'灰度扩展.jpg');
%反转 a=-1,b=255%
I3=255-1.*I;
figure('Name','反转');
imshow(I3);
imwrite(I3,'反转.jpg');
运行结果:
原图:
灰度压缩:
灰度扩展:
灰度反转:
2.分段灰度变换的Matlab实现:
在一些情况下,我们需要对图像中感兴趣的区域进行提取,就可以使用分段灰度变换。将感兴趣的区域进行灰度扩展,对不感兴趣的区域进行灰度抑制。
分段灰度变换的灰度变换函数形式可表示为分段函数形式:
y(1:40) = 255;
y(41:150) = 0;
y(151:256) = 255;
I4=uint8(y(I));
figure('Name','分段');
imshow(I4)
3.非线性灰度变换的Matlab实现:
非线性灰度变换的输出灰度级与输入灰度级呈现非线性关系,常见的非线性灰度变换有对数变换和幂次变换。
对数变换:
s
=
c
l
o
g
(
1
+
r
)
s=c log(1+r)
s=clog(1+r)
幂次变换:
s
=
c
r
γ
s=c r^{\gamma}
s=crγ
I5=mat2gray(log(1+double(I)));
figure('Name','对数');
imshow(I5)
I6=mat2gray(double(I).^2);
figure('Name','指数');
imshow(I6)