灰度变换
灰度变换
索引技术
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
灰度变换
空间域技术是直接对图像的像素进行操作,灰度变换的空间域处理用下列表达式进行了概括
其中是输入图像,是输出图像,T则是算子。
灰度变换函数
算子T最简单的情况就是领域的情况,这种情况下灰度变换函数只与该位置的灰度值有关,可表示为如下简单形式
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函数中的输入参数中是怎么增加了对比度呢?其用意不太明白。
对数及对比度扩展变换
对数变换
对数变换用下列表达式进行概括
其中c是常数,f是浮点数。对数变换的一项主要作用是压缩动态范围,将超出硬件显示的动态范围进行压缩。
对于被压缩值我们希望将其返回至全域。对于一个8比特图像来说。
- 通过对数变换得到想要的g
g = log(1 + double(f));
- 首先通过mat2gray函数将图像矩阵值限定在[0,1]范围中。
mat = mat2gray(g);
- 然后通过im2uint8再把值拉回至全域[0,255]。
gs = im2uint8(mat2gray(mat));
(f) (gs)
对比度拉伸
对比度函数可以将输入图像的窄范围扩展到输出图像的宽范围,可以用下列公式概括
函数图像:
指定任意灰度变换
如果有必要使用指定的变换函数变换一幅图片的灰度可用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里面。
上一篇: canvas与JS实现动态时钟动画
下一篇: 原生js实现动态时钟