欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

灰度变换

程序员文章站 2022-05-30 09:25:38
...

灰度变换

索引技术

MATLAB提供了大量的索引技术,下面罗列使用到的索引技术1×N的数组被称为行向量。首先先写出一个举例向量v

v=[2 3 5]
v =
     2     3     5

MATLAB中向量使用中括号括起,并用空格逗号隔开。

转置算子 ( .’ ) 可将向量转置

w=V.'
w =
     2
     3
     5

对于单行的向量直接使用下标访问即可,跟其他编程语言并无区别

w(2)
ans =

     3

元素块的索引

元素块索引则跟Python类似,不过MATLAB中第一位元素从1开始算起,并不是0.

>> v(2:end)

ans =

     3     5

还可以将一个向量用作索引进入圆括号内,在我们想得到不连续的元素时使用。

>> v([1 3])

ans =

     2     5

MATLAB中一样有步长的计算,步长简单来说就是走了几步路

>> V(1:2:end)

ans =

     2     5

矩阵索引

矩阵因为是多维的所以索引需要一个行索引一个列索引。距离矩阵A

>> A=[1 2 3;4 5 6;7 8 9]

A =

     1     2     3
     4     5     6
     7     8     9

行索引和列索引用逗号隔开,在各自的行和列中索引与上面一样用冒号

>> A(2,2)//矩阵的第二行第二个

ans =

     5
-------------------------------------     
>> A(2:3,1:end)//矩阵第二三行

ans =

     4     5     6
     7     8     9

灰度变换

空间域技术是直接对图像的像素进行操作,灰度变换的空间域处理用下列表达式进行了概括

g(x,y)=T[f(x,y)]g(x,y)=T[f(x,y)]

其中f(x,y)f(x,y)输入图像,g(x,y)g(x,y)输出图像,T则是算子。

灰度变换函数

算子T最简单的情况就是111*1领域的情况,这种情况下灰度变换函数只与该位置的灰度值有关,可表示为如下简单形式

s=T(r)s=T(r)

imadjust函数和stretchlim函数

imadjust函数是灰度变换的基本函数

g = imadjust(f,[low_in high_in],[low_out high_out],gamma)

[low_in high_in],[low_out high_out]参数

low_in以下的值会被截取为low_out,high_in以上的值会被截取为high_out,除了f和gamma,其他都应控制在[0,1]之间,matla会根据f的类型来进行相应的乘法。[]空矩阵等价于[0,1]。如果high_out<low_out,输出灰度将会反转。

gamma参数

gamma则指定了映射图像的曲线。如果省略gamma则默认为1.

灰度变换

使用下列例子说明,这是一幅数字乳房X射线图像\

使用imadjust函数来增强它的效果,我们不感兴趣的区域大部分是黑色,这影响了我们的观察,因此通过灰度变换来改变图片的效果。右图为g1,左图为初始图f。

>> g1=imadjust(f,[0 1],[1 0]);

灰度变换 (f) 灰度变换 (g1)

显而易见的改善了图像效果。这样的负片操作我们可以使用imcomplement函数实现

>> g=imcomplement(f);

疑惑

stretchlim函数中所说的饱和度,是指颜色偏离本色的程度,这样的一个东西带入的imadjust函数中的输入参数中是怎么增加了对比度呢?其用意不太明白。

对数及对比度扩展变换

对数变换

对数变换用下列表达式进行概括

g=clog(1+(f))g = c * log( 1 + (f) )

其中c是常数,f是浮点数。对数变换的一项主要作用是压缩动态范围,将超出硬件显示的动态范围进行压缩。

对于被压缩值我们希望将其返回至全域。对于一个8比特图像来说。

  • 通过对数变换得到想要的g
g = log(1 + double(f));
  • 首先通过mat2gray函数将图像矩阵值限定在[0,1]范围中。
mat = mat2gray(g);  
  • 然后通过im2uint8再把值拉回至全域[0,255]。
gs = im2uint8(mat2gray(mat));

灰度变换(f)灰度变换 (gs)

对比度拉伸

对比度函数可以将输入图像的窄范围扩展到输出图像的宽范围,可以用下列公式概括

s=T(r)=1/1+(m/r)Es= T(r) = 1/1 + (m/r)^E

函数图像:灰度变换

指定任意灰度变换

如果有必要使用指定的变换函数变换一幅图片的灰度可用T列向量来表示映射结果,T(1)表示灰度值0的映射,T(2)表示灰度值1的映射,T(256)表示灰度值255的映射。简单的用法如下

g = interp1(z,T,f)

其中f是输入图像,g是输出图像,T是刚才说明的列向量,z是与T等长的列向量。z的形式如下

z = linspace(0,1,numel(T))';

1.插值函数interp1 2.linspace函数 3. numel(T)函数

核心是用插值函数来进行插值,真正的变换函数其实在T里面。


相关标签: 机器学习