彩色图像处理
索引图像
-
概念
一幅索引图包含一个数据矩阵data和一个调色板矩阵map,数据矩阵可以是uint8,uint16或双精度类型的,而调色板矩阵则总是一个m×3的双精度矩阵
索引图像相比彩色图像,文件更小,主要用于网络上的图片传输和一些对图像像素、大小等有严格要求的地方
imshow(X, copper)
,copper为MATLAB内置彩色映射 -
图像“抖动”(用黑白二值图产生灰色调)
bw= dither(gray_img)
%灰度图转换为二值“抖动”图
rgb2ind
对减少RGB图像的色彩数很有用
图像基本操作
-
分离通道&合并通道
- MATLAB
rgb_img= cat(3, fR, fG, fB) fR = rgb_img(:,:,1) fG = rgb_img(:,:,2) fB = rgb_img(:,:,3) %rgbcube(vx,vy,vz),绘制彩色立方体
- python
B,G,R = cv2.split(image) img = cv2.merge([B,G,R])
-
色彩空间转换
- 颜色空间类型
NTSC,YCbCr,HSV,CMYK,HSI - MATLAB
hsv_img= rgb2hsv(rgb_img) rgb_img= hsv2rgb(hsv_img) cmy_img= imcomplement(rgb_img) rgb_img= imcomplement(cmy_img)
- python
#skimage skimage.color.rgb2grey(rgb) skimage.color.rgb2hsv(rgb) skimage.color.rgb2lab(rgb) skimage.color.gray2rgb(image) skimage.color.hsv2rgb(hsv) skimage.color.lab2rgb(lab) #opencv cv2.cvtColor(input_image,flag) #flag:cv2.COLOR_BGR2GRAY, cv2.COLOR_BGR2HSV....
- 颜色空间类型
彩色变换
-
生成映射函数
z=interplq(x,y,xi)
:z=interplq([0 255]' [0 255]' [0:255]')
z=spline(x,y,xi)
:若y比x多两个元素,则第一个和最后一个被假定为三次样条的端滚降g=ice('image',f,'space','hsi')
:鼠标控制映射曲线
-
彩色图均衡化
RGB分量分别均衡化会导致错误的色彩,转换为HSI后,H不动(色调保持不变),S、I进行均衡化。
彩色图像空间滤波
- 平滑-在RGB独立分量上同时进行
%MATLAB w=fspecial('average',25) I_filter=imfilter(I,w,'replicate')
- 锐化-在RGB独立分量上同时进行
%MATLAB mask=[1 1 1;1 -8 1;1 1 1] fen=imsubstract(fb,imfilter(fb,mask,'replicate'))
RGB向量空间直接处理
基于单独彩色平面的处理不等于直接在RGB向量空间中处理
-
使用梯度的彩色边缘检测
- 灰度图像梯度
二维函数 f ( x , y ) f(x,y) f(x,y)的梯度向量为 ∇ f = [ G x G y ] T = [ ∂ f ∂ x ∂ f ∂ y ] T \nabla f= [G_x G_y]^T=[\frac{\partial f}{\partial x} \frac{\partial f}{\partial y}]^T ∇f=[GxGy]T=[∂x∂f∂y∂f]T
梯度向量幅值为 m a g ( ∇ f ) = [ G x 2 + G y 2 ] 1 / 2 = [ ∂ f ∂ x 2 + ∂ f ∂ y 2 ] 1 / 2 mag(\nabla f)=[{G_x}^2+{G_y}^2]^{1/2}=[{\frac{\partial f}{\partial x}}^2+{\frac{\partial f}{\partial y}}^2]^{1/2} mag(∇f)=[Gx2+Gy2]1/2=[∂x∂f2+∂y∂f2]1/2
使用近似值避免平方与开平方运算(幅度与变化程度成比例)$ mag(\nabla f) \approx|G_x|+|G_y|$。
G x G_x Gx等导数用邻域内的像素值差来计算最大梯度角度 α ( x , y ) = a r c t a n ( G y G x ) \alpha(x,y)=arctan(\frac{G_y}{G_x}) α(x,y)=arctan(GxGy)
-
彩色空间计算梯度
将这三个通道的信息看作是一个矢量,而矢量是不存在梯度的概念的,我们无法直接将上诉方法或算子直接用于RGB 图像,而且RGB图像单个通道的梯度信息又无法反映整体的梯度信息。- 彩色空间梯度推导
在多通道图像中,假设梯度方向为 θ \theta θ
∇ f = ∣ ∣ f ( x + ε c o s θ , y + ε s i n θ ) ∣ ∣ \nabla f = ||f(x+\varepsilon cos\theta, y+\varepsilon sin\theta)|| ∇f=∣∣f(x+εcosθ,y+εsinθ)∣∣
为了便于计算,将计算绝对值换为计算平方,令
∇ f 2 = ∣ ∣ f ( x + ε c o s θ , y + ε s i n θ ) ∣ ∣ 2 \nabla f^2 = ||f(x+\varepsilon cos\theta, y+\varepsilon sin\theta)||^2 ∇f2=∣∣f(x+εcosθ,y+εsinθ)∣∣2
对 f ( x + ε c o s θ , y + ε s i n θ ) f(x+\varepsilon cos\theta, y+\varepsilon sin\theta) f(x+εcosθ,y+εsinθ)进行二次泰勒展开:
f ( x + ε c o s θ , y + ε s i n θ ) = f ( x , y ) + ∑ i = 1 m ( ε c o s θ ⋅ ∂ f i ( x , y ) ∂ x + ε s i n θ ⋅ ∂ f i ( x , y ) ∂ y ) + o n f(x+\varepsilon cos\theta, y+\varepsilon sin\theta)=f(x,y)+\sum_{i=1}^m (\varepsilon cos\theta \cdot \frac{\partial f_i(x,y)}{\partial x}+\varepsilon sin\theta \cdot \frac{\partial f_i(x,y)}{\partial y})+o^n f(x+εcosθ,y+εsinθ)=f(x,y)+i=1∑m(εcosθ⋅∂x∂fi(x,y)+εsinθ⋅∂y∂fi(x,y))+on
≈ f ( x , y ) + ∑ i = 1 m ( ε c o s θ ⋅ ∂ f i ( x , y ) ∂ x + ε s i n θ ⋅ ∂ f i ( x , y ) ∂ y ) \approx f(x,y)+\sum_{i=1}^m (\varepsilon cos\theta \cdot \frac{\partial f_i(x,y)}{\partial x}+\varepsilon sin\theta \cdot \frac{\partial f_i(x,y)}{\partial y}) ≈f(x,y)+i=1∑m(εcosθ⋅∂x∂fi(x,y)+εsinθ⋅∂y∂fi(x,y))
其中 m m m表示图像通道数,为方便表述,用 ∂ f i ∂ x \frac{\partial f_i}{\partial x} ∂x∂fi代替 ∂ f i ( x , y ) ∂ x \frac{\partial f_i(x,y)}{\partial x} ∂x∂fi(x,y),则有:
∇ f 2 = ∑ i = 1 m ( ε c o s θ ⋅ ∂ f i ∂ x + ε s i n θ ⋅ ∂ f i ∂ y ) 2 \nabla f^2 = \sum_{i=1}^m (\varepsilon cos\theta \cdot \frac{\partial f_i}{\partial x}+\varepsilon sin\theta \cdot \frac{\partial f_i}{\partial y})^2 ∇f2=i=1∑m(εcosθ⋅∂x∂fi+εsinθ⋅∂y∂fi)2
重新定义函数 G ( θ ) G(\theta) G(θ),令
G ( θ ) = ∑ i = 1 m ( ε c o s θ ⋅ ∂ f i ∂ x + ε s i n θ ⋅ ∂ f i ∂ y ) 2 G(\theta)= \sum_{i=1}^m (\varepsilon cos\theta \cdot \frac{\partial f_i}{\partial x}+\varepsilon sin\theta \cdot \frac{\partial f_i}{\partial y})^2 G(θ)=i=1∑m(εcosθ⋅∂x∂fi+εsinθ⋅∂y∂fi)2
= ε 2 ( c o s θ 2 ⋅ ∑ i = 1 m ∣ ∣ ∂ f i ∂ x ∣ ∣ 2 + s i n θ 2 ⋅ ∑ i = 1 m ∣ ∣ ∂ f i ∂ y ∣ ∣ 2 + 2 s i n θ c o s θ ∑ i = 1 m ∂ f i ∂ x ∂ f i ∂ y ) =\varepsilon^2 (cos\theta^2 \cdot \sum_{i=1}^m||\frac{\partial f_i}{\partial x}||^2+sin\theta^2 \cdot \sum_{i=1}^m||\frac{\partial f_i}{\partial y}||^2+2sin\theta cos\theta \sum_{i=1}^m \frac{\partial f_i}{\partial x} \frac{\partial f_i}{\partial y}) =ε2(cosθ2⋅i=1∑m∣∣∂x∂fi∣∣2+sinθ2⋅i=1∑m∣∣∂y∂fi∣∣2+2sinθcosθi=1∑m∂x∂fi∂y∂fi)
因为要求 G ( θ ) G(\theta) G(θ)最大值, ε \varepsilon ε无用,舍去
G ( θ ) = c o s θ 2 ⋅ ∑ i = 1 m ∣ ∣ ∂ f i ∂ x ∣ 2 ∣ + s i n θ 2 ⋅ ∑ i = 1 m ∣ ∣ ∂ f i ∂ y ∣ ∣ 2 + 2 s i n θ c o s θ ∑ i = 1 m ∂ f i ∂ x ∂ f i ∂ y G(\theta)=cos\theta^2 \cdot \sum_{i=1}^m||\frac{\partial f_i}{\partial x}|^2|+sin\theta^2 \cdot \sum_{i=1}^m||\frac{\partial f_i}{\partial y}||^2+2sin\theta cos\theta \sum_{i=1}^m \frac{\partial f_i}{\partial x} \frac{\partial f_i}{\partial y} G(θ)=cosθ2⋅i=1∑m∣∣∂x∂fi∣2∣+sinθ2⋅i=1∑m∣∣∂y∂fi∣∣2+2sinθcosθi=1∑m∂x∂fi∂y∂fi
为了进一步方便表述;令
E = ∑ i = 1 m ∣ ∣ ∂ f i ∂ x ∣ ∣ 2 ; F = ∑ i = 1 m ∣ ∣ ∂ f i ∂ y ∣ ∣ 2 ; H = ∑ i = 1 m ∂ f i ∂ x ∂ f i ∂ y E=\sum_{i=1}^m||\frac{\partial f_i}{\partial x}||^2; F=\sum_{i=1}^m||\frac{\partial f_i}{\partial y}||^2; H=\sum_{i=1}^m \frac{\partial f_i}{\partial x} \frac{\partial f_i}{\partial y} E=i=1∑m∣∣∂x∂fi∣∣2;F=i=1∑m∣∣∂y∂fi∣∣2;H=i=1∑m∂x∂fi∂y∂fi
G ( θ ) = c o s θ 2 E + s i n θ 2 F + 2 s i n θ c o s θ H G(\theta)=cos\theta^2 E + sin\theta^2 F + 2sin\theta cos\theta H G(θ)=cosθ2E+sinθ2F+2sinθcosθH
边缘的方向是图像像素梯度最大的方向。也就是说梯度的方向\theta_max会使G(\theta)取最大值,则;
θ m a x = G ( θ ) a r g m a x \theta_max=\mathop{G(\theta)}\limits_{argmax} θmax=argmaxG(θ)
对 G ( θ ) G(\theta) G(θ)进行求导
G ( θ ) ′ = − E c o s ( 2 θ ) + 2 F c o s ( 2 θ ) + H s i n ( 2 θ ) G(\theta)'=-Ecos(2\theta)+2Fcos(2\theta)+Hsin(2\theta) G(θ)′=−Ecos(2θ)+2Fcos(2θ)+Hsin(2θ)
令 G ( θ ) ′ = 0 G(\theta)'=0 G(θ)′=0,可得:
t a n ( 2 θ m a x ) = 2 F E − H tan(2\theta_max)=\frac{2F}{E-H} tan(2θmax)=E−H2F
θ m a x = 1 2 a r c t a n ( 2 F E − H + k π ) \theta_max=\frac{1}{2}arctan(\frac{2F}{E-H}+k\pi) θmax=21arctan(E−H2F+kπ)
很明显 G ( θ ) G(\theta ) G(θ)是一个以\pi为周期的周期函数,如果只考虑区间 [ 0 , π ) [ 0 , π ) \left [ 0 ,\pi\right )[0,π) [0,π)[0,π),且 θ m a x \theta_{max} θmax落到该区间内,则会有另一个让 G ( θ ) G(\theta ) G(θ)取极值的解也落在该区域内,
这个值是 θ m a x + π 2 \theta_{max}+ \frac{\pi}{2} θmax+2π或者 θ m a x − π 2 \theta_{max}-\frac{\pi}{2} θmax−2π。但是不论如何这两个解有一个让 G ( θ ) G(\theta ) G(θ)取极大值,另一个让其取极小值,两个角度相差 90°。 - 应用计算
设 r ⃗ , g ⃗ , b ⃗ \vec r,\vec g, \vec b r,g,b分别是RGB彩色空间定义向量,并定义向量
u ⃗ = ∂ R ∂ x r ⃗ + ∂ G ∂ x g ⃗ + ∂ B ∂ x b ⃗ \vec u = \frac{\partial R}{\partial x} \vec r + \frac{\partial G}{\partial x} \vec g + \frac{\partial B}{\partial x} \vec b u=∂x∂Rr+∂x∂Gg+∂x∂Bb
v ⃗ = ∂ R ∂ y r ⃗ + ∂ G ∂ y g ⃗ + ∂ B ∂ y b ⃗ \vec v = \frac{\partial R}{\partial y} \vec r + \frac{\partial G}{\partial y} \vec g + \frac{\partial B}{\partial y} \vec b v=∂y∂Rr+∂y∂Gg+∂y∂Bb
g x x , g y y , g x y g_xx,g_yy,g_xy gxx,gyy,gxy是这些向量的点积:
g x x = u ⃗ ⋅ u ⃗ = u ⃗ T u ⃗ = ∣ ∂ R ∂ x ∣ 2 + ∣ ∂ G ∂ x ∣ 2 + ∣ ∂ B ∂ x ∣ 2 g_xx= \vec u \cdot \vec u =\vec u^T \vec u =|\frac{\partial R}{\partial x}|^2+|\frac{\partial G}{\partial x}|^2 +|\frac{\partial B}{\partial x}|^2 gxx=u⋅u=uTu=∣∂x∂R∣2+∣∂x∂G∣2+∣∂x∂B∣2
g x x = v ⃗ ⋅ v ⃗ = v ⃗ T v ⃗ = ∣ ∂ R ∂ y ∣ 2 + ∣ ∂ G ∂ y ∣ 2 + ∣ ∂ B ∂ y ∣ 2 g_xx= \vec v \cdot \vec v =\vec v^T \vec v =|\frac{\partial R}{\partial y}|^2+|\frac{\partial G}{\partial y}|^2 +|\frac{\partial B}{\partial y}|^2 gxx=v⋅v=vTv=∣∂y∂R∣2+∣∂y∂G∣2+∣∂y∂B∣2
g x x = u ⃗ ⋅ v ⃗ = u ⃗ T v ⃗ = ∂ R ∂ x ∂ R ∂ y + ∂ G ∂ x ∂ G ∂ y + ∂ B ∂ x ∂ B ∂ y g_xx= \vec u \cdot \vec v =\vec u^T \vec v =\frac{\partial R}{\partial x}\frac{\partial R}{\partial y}+\frac{\partial G}{\partial x}\frac{\partial G}{\partial y} +\frac{\partial B}{\partial x}\frac{\partial B}{\partial y} gxx=u⋅v=uTv=∂x∂R∂y∂R+∂x∂G∂y∂G+∂x∂B∂y∂B
梯度方向角:
θ ( x , y ) = 1 2 a r c t a n [ 2 g x y g x x − g y y ] \theta(x,y)=\frac{1}{2}arctan[\frac{2g_xy}{g_xx-g_yy}] θ(x,y)=21arctan[gxx−gyy2gxy]
梯度值:
F θ ( x , y ) = { 1 2 [ ( g x x + g y y ) + ( g x x − g y y ) c o s 2 θ + 2 g x y s i n 2 θ } ] 1 / 2 F_\theta(x,y)=\{ \frac{1}{2}[(g_xx+g_yy)+(g_xx-g_yy)cos2\theta+2g_xy sin2\theta\}]^{1/2} Fθ(x,y)={21[(gxx+gyy)+(gxx−gyy)cos2θ+2gxysin2θ}]1/2 - MATLAB
[VG, A, PPG]= colorgrad(f,T)
其中,f是RGB图像,T是[0,1]范围内的阈值选项(默认为0);
VG是RGB向量梯度 F θ ( x , y ) F_\theta(x, y) Fθ(x,y);A是以弧度计的角度 θ ( x , y ) \theta(x, y) θ(x,y),并且PPG是由单独彩色平面的2D梯度之和形成的梯度图像。
计算上述方程时,要求全部微分都可用函数clorgrad中的Sobel算子来实现。输出VG和PPG通过clorgrad被归一化到[0, 1]范围内,并且把它们作为阈值进行处理。所以,它们的值小于或等于T,VG(x,y)=0;对于其他的情况, V G ( x , y ) = V G ( x , y ) VG(x,y) = VG(x,y) VG(x,y)=VG(x,y)。
- python
Q:!!!没有彩色图像梯度?都是sobel与laplacian
- 彩色空间梯度推导
-
RGB向量空间中的图像分割
-
距离度量(计算相似度)
- 欧几里得距离
D ( z ⃗ , m ⃗ ) = ∣ ∣ z ⃗ − m ⃗ ∣ ∣ = [ ( z ⃗ − m ⃗ ) T ( z ⃗ − m ⃗ ) ] 1 / 2 D(\vec z,\vec m)=||\vec z - \vec m||=[(\vec z - \vec m)^T(\vec z - \vec m)]^{1/2} D(z,m)=∣∣z−m∣∣=[(z−m)T(z−m)]1/2 - 马氏距离(mahalanobis)
D ( z ⃗ , m ⃗ ) = [ ( z ⃗ − m ⃗ ) T C − 1 ( z ⃗ − m ⃗ ) ] 1 / 2 D(\vec z,\vec m)=[(\vec z - \vec m)^T C^{-1}(\vec z - \vec m)]^{1/2} D(z,m)=[(z−m)TC−1(z−m)]1/2
C是要分割的彩色样值表示的协方差矩阵。马氏距离一个三维椭圆体,重要属性是主轴取在最大数据扩展方向上。
马氏距离与尺度无关
如果是单纯使每个变量先标准化,然后再计算距离,可能会出现某种错误,原因是可能在有些多维空间中,某个两个维之间可能是线性相关的。
通过对线性无关的分量进行标准化后,再求得距离是合理的。
mahalanobis距离是基于样本分布的一种距离。物理意义就是在规范化的主成分空间中的欧氏距离。
它的缺点是夸大了变化微小的变量的作用。 - 欧几里得距离
-
马氏距离推导
- 基本思想
如下图的过程(以两个维度作为例子),此例的数据重心为原点,P1,P2到原点的欧氏距离相同,但点P2在y轴上相对原点有较大的变异,而点P1在x轴上相对原点有较小的变异。所以P1点距原点的直观距离是比P2点的小的。
!
马氏距离就是解决这个问题,它将直观距离和欧式距离统一。为了做到这一点, 它先将数据不同维度上的方差统一(即各维度上的方差相同),此时的欧式距离就是直观距离。
如下图:统一方差后的图,P1到原点的距离小于P2。P1到原点的欧式距离和P2的相同。以上所说的直观距离就是马氏距离。但是,如果不同维度之间具有相关性,则压缩的效果就不好了。如下图只在横向和纵向上压缩,则达不到上图的压缩效果。所以在F1方向和F2方向上压缩数据才能达到较好的效果。所以需要将原始数据在XY坐标系中的坐标 表示在F坐标系中。然后再分别沿着坐标轴压缩数据。
所以,计算样本数据的马氏距离分为两个步骤:1、坐标旋转;2、数据压缩
坐标旋转的目标:使旋转后的各个维度之间线性无关,所以该旋转过程就是主成分分析的过程。
数据压缩的目标:所以将不同的维度上的数据压缩成为方差都是1的的数据集。- 理论推导
有一个原始的多维样本数据 X n ∗ m X_{n*m} Xn∗m(m列,n行):
x 11 x 12 ⋯ x 1 m x 21 x 22 ⋯ x 2 m ⋮ ⋮ ⋱ ⋮ x n 1 x n 2 ⋯ x n m \begin{matrix} x_{11} & x_{12} & \cdots & x_{1m}\\ x_{21} & x_{22} & \cdots & x_{2m}\\ \vdots & \vdots & \ddots & \vdots \\ x_{n1} & x_{n2} & \cdots & x_{nm} \end{matrix} x11x21⋮xn1x12x22⋮xn2⋯⋯⋱⋯x1mx2m⋮xnm
其中每一行表示一个测试样本(共n个); X i X_i Xi表示样本的第i个维度(共m个)。 X i = ( x 1 i , x 2 i , … , x n i ) T X_i=(x_{1i},x_{2i},…,x_{ni})^T Xi=(x1i,x2i,…,xni)T ,以上多维样本数据记为 X = ( X 1 , X 2 ⋯ X m ) X=(X_1,X_2⋯X_m) X=(X1,X2⋯Xm)。样本的总体均值为 μ X = ( μ X 1 , μ X 2 ⋯ μ X m ) \mu_X=(\mu_{X1},\mu_{X2}⋯\mu_{Xm}) μX=(μX1,μX2⋯μXm)。其协方差为:
∑ X = E ( X − μ X ) T ( X − μ X ) = 1 n ( X − μ X ) T ( X − μ X ) \sum X=E{(X−\mu_X)^T(X−\mu_X)}=\frac{1}{n}(X−\mu_X)^T(X−\mu_X) ∑X=E(X−μX)T(X−μX)=n1(X−μX)T(X−μX)
协方差矩阵表示样本数据各维度之间的关系的。其中n是样本的数量。
将原始数据集X通过坐标旋转矩阵U旋转到新的坐标系统中得到一个各变量线性无关的新的数据集F。
F T = ( F 1 , F 2 ⋅ F m ) T = U X T ((1)) F^T = (F_1,F_2 \cdot F_m)^T = UX^T \tag{(1)} FT=(F1,F2⋅Fm)T=UXT((1))
新数据集F的均值记为KaTeX parse error: \tag works only in display equations
由公式 ( 1 ) ( 2 ) (1)(2) (1)(2)可知:KaTeX parse error: \tag works only in display equations
由于F的各维度之间是不相关的,所以新数据集F的协方差矩阵\sum_F应该为对角阵,由公式 ( 3 ) (3) (3)可得:
∑ F = E ( F − μ F ) T ( F − μ F ) = 1 n ( F − μ F ) T ( F − μ F ) {\sum}_F = E{(F−\mu_F)^T (F−\mu_F)}= \frac{1}{n}(F−\mu_F)^T (F−\mu_F) ∑F=E(F−μF)T(F−μF)=n1(F−μF)T(F−μF)
= 1 n U ( X − μ X ) T ( X − μ X ) U T = U ∑ X U T = [ λ 1 λ 2 ⋱ λ m ] =\frac{1}{n} U(X−\mu_X)^T(X−\mu_X)U^T =U {\sum}_X U^T= \left[ \begin{matrix} \lambda_1 & & & \\ & \lambda_2 & & \\ & & \ddots & \\ & & & \lambda_m \end{matrix} \right] =n1U(X−μX)T(X−μX)UT=U∑XUT= λ1λ2⋱λm
可以看出,其中 X X X数据的协方差的根号特征值 λ i \sqrt{\lambda_i} λi 就是 F F F数据中第i个维度的方差。U为 ∑ X \sum_X ∑X的特征向量构成的正交矩阵 U T = U − 1 U^T=U^{−1} UT=U−1。
将不同的维度上的数据压缩成为方差都是1,以下推导马氏距离公式:
d 2 ( f , μ F ) = ( F 1 − μ F 1 λ 1 ) 2 + ( F 2 − μ F 2 λ 2 ) 2 + ⋅ + ( F m − μ F m λ m ) 2 d^2(f,\mu_F)= (\frac{F_1-\mu_{F_1}}{\sqrt{\lambda_1}})^2+(\frac{F_2-\mu_{F_2}}{\sqrt{\lambda_2}})^2+ \cdot +(\frac{F_m-\mu_{F_m}}{\sqrt{\lambda_m}})^2 d2(f,μF)=(λ1F1−μF1)2+(λ2F2−μF2)2+⋅+(λmFm−μFm)2
= ( F 1 − μ F 1 , F 2 − μ F 2 ⋯ F m − μ F m ) [ 1 λ 1 1 λ 2 ⋱ 1 λ m ] ( F 1 − μ F 1 , F 2 − μ F 2 ⋯ F m − μ F m ) T =(F_1−\mu_{F_1},F_2−\mu_{F_2}⋯ F_m−\mu_{F_m}) \left[\begin{matrix} \frac{1}{\lambda_1} & & & \\ & \frac{1}{\lambda_2} & & \\ & & \ddots & \\ & & & \frac{1}{\lambda_m } \end{matrix}\right] (F_1−\mu_{F_1},F_2−\mu_{F_2}⋯ F_m−\mu_{F_m})^T =(F1−μF1,F2−μF2⋯Fm−μFm) λ11λ21⋱λm1 (F1−μF1,F2−μF2⋯Fm−μFm)T
= ( F − μ F ) ( U ∑ X U T ) − 1 ( F − μ F ) T = ( X − μ X ) U T ( U ∑ X U T ) − 1 U ( X − μ X ) T = ( X − μ X ) ∑ X − 1 ( X − μ X ) T =(F−\mu_F)(U {\sum}_X U^T)^{−1}(F−\mu_F)^T=(X−\mu_X)U^T(U{\sum}_X U^T)^{−1} U(X−\mu_X)^T = (X−\mu_X) {\sum}_X^{−1} (X−\mu_X)^T =(F−μF)(U∑XUT)−1(F−μF)T=(X−μX)UT(U∑XUT)−1U(X−μX)T=(X−μX)∑X−1(X−μX)T
- 基本思想
-
MATLAB
- 函数
- 案例
mask= roipoly(f); %交互式确定感兴趣区域 red= immuliply(mask, f(:,:,1)); green= immuliply(mask, f(:,:,2)); blue= immuliply(mask, f(:,:,3)); g = cat(3, red, green, blue); %计算均值向量与协方差矩阵 [M N K] = size(g) I = reshape(g, M*N, 3) idx = find(mask) I = double(I(idx, 1:3)) [C, m] = covmatrix(I) %求协方差矩阵与均值向量 %d = diag(C) %sd = sqrt(d) E25 = colorseg('mahalanobis',f,25,m)
-