影像處理的基本演算法

來源:互聯網
上載者:User

1)將256*256解析度的映像變為128*128解析度可以將源映像劃分成2*2的子映像塊,然後將2*2的
子映像塊的所有像素顏色均按照F(i,j)的顏色值進行設定,達到降低解析度的目的。
如:
F(i,j)    F(i,j+1)                  F(i,j) F(i,j)
F(i+1,j) F(i+1,j+1)   變成   F(i,j) F(i,j)
(同理,256*256解析度的映像變成64*64解析度,只需要劃分成4*4即可,以此類推。)

2) R單色, G單色,B單色化映像,只需要將映像的每一個像素中的相應的R, G, B值取出,然後利用類似
(R,R,R),(G,G,G),(B,B,B)的像素重新繪製即可。

3) 彩色映像的RGB和亮度Y,色差I,訊號值Q的關係
| Y |    |0.31 0.59 0.11   |    | R |
| I | = |0.60 -0.28 -0.32 | * | G |
|Q |     |0.21 -0.52 -0.31 |    | B |

即 Y = 0.31R + 0.59G+0.11B
     I = 0.60R - 0.28G - 0.32B
     Q = 0.21R - 0.52B - 0.31B

4) 彩色映像的逆反處理: 將對應的(R, G, B)像素替換成(255 - R, 255 - G, 255 - B)
     彩色映像的平滑處理:   將一個圖片每一個像素的顏色由其相鄰的n*n個像素的平均值來替代。例如,將一個3*3的點陣,設帶平滑的像素為f(i, j),平滑後為g(i, j),那麼
f(i-1,j-1) f(i-1,j) f(i-1,j+1)
f(i,j-1)     f(i,j)      f(i,j+1)
f(i+1,j-1) f(i+1,j) f(i+1,j+1)

g(i,j)=( f(i-1,j-1) + f(i-1,j) + f(i-1,j+1) + f(i,j-1) + f(i,j) + f(i,j+1) + f(i+1,j-1) + f(i+1,j) + f(i+1,j+1) ) / 9

這裡要注意的是對於邊緣的像素的情況,防止越界。
     彩色映像的霓虹處理:   同樣以上面的3*3的點陣為例,目標像素g(i,j)應當以f(i,j)與f(i,j+1),f(i,j)與f(i+1,j)的梯度作為R,G,B分量,我們不妨設f(i,j)的RGB分量為(r1, g1, b1), f(i,j+1)為(r2, g2, b2), f(i+1,j)為(r3, g3, b3), g(i, j)為(r, g, b),那麼結果應該為
r = 2 * sqrt( (r1 - r2)^2 + (r1 - r3)^2 )
g = 2 * sqrt( (g1 - g2)^2 + (g1 - g3)^2 )
b = 2 * sqrt( (b1 - b2)^2 + (b1 - b3)^2 )
     彩色映像的銳利化處理:   設f(i,j)像素為(r1, g1, b1) , f(i-1,j-1)像素為(r2,g2,b2), g(i,j)像素為(r,g,b),則
r = r1 + 0.25 * |r1 - r2|
g = g1 + 0.25 * |g1 - g2|
b = b1 + 0.25 * |b1 - b2|
     彩色映像的浮雕處理:   g(i, j) = f(i, j) - f(i - 1, j) + 常數 , 這裡的常數通常選作128
     彩色映像的鑲嵌處理:   與彩色映像的平滑處理類似,但是不同的地方在於3*3的目標像素點都取作g(i,j),而不是另外的再去取所在矩陣像素的平均值。
     彩色映像的灰階處理:   r = r1 / 64 * 64 g = g1 / 64 * 64 b = b1 / 64 * 64 注意這裡的除法是程式設計當中的整數除法。

5) 圖象的幾何變換:平移,縮放,旋轉等均於解析幾何當中的保持一致。

6) 圖象的濾波處理
● 卷積濾波 原理是 y(n1, n2)=∑∑x(m1,m2)h(n1-m1,n2-m2) (兩個求和符號的範圍分別是 m1:0~N m2:0~N)
其中x(m1,m2)為輸入映像訊號,h(n1-m1,n2-m2)為濾波系統對單位採樣序列δ(n1,n2)的響應。
   ⊙低通濾波 一般而言,映像中的雜訊頻譜位於空間頻率較高的地區,空間域低通濾波用於平滑雜訊。常用低通濾波的
h(n1, n2) 的3*3陣列如下:
              1/9   1/9   1/9
h(n1, n2) =   1/9    1/9   1/9
                   1/9    1/9    1/9
                   1/10   1/10   1/10
h(n1, n2) =   1/10    2/10   1/10
                   1/10    1/10    1/10                     
                    1/16   1/8   1/16
h(n1, n2) =   1/8     1/4   1/8
                   1/16    1/8    1/16
採用5*5陣列低通濾波h(n1,n2)如下:
                    1/35 1/35 1/35 1/35 1/35
                    1/35 2/35 2/35 2/35 1/35
h(n1, n2) =   1/35 2/35 3/35 2/35 1/35    
                    1/35 2/35 2/35 2/35 1/35   
                    1/35 1/35 1/35 1/35 1/35         
⊙高通濾波   空域高通濾波是對映像的低頻分量進行擬制,讓映像的高頻分量無損耗或者低損耗的通過。空域高通濾波常用的h(n1,n2)的如下:
                   0   -1   0
h(n1, n2) = -1   5   -1
                   0    -1   0
                    -1 -1   -1
h(n1, n2) = -1    9   -1
                    -1   -1   -1
                    1   -2   1
h(n1, n2) = -2   5   -2
                   0    -2   1
● 增強處理 
⊙   水平增強 增強映像水平方向線條也是一種高通濾波。水平增強h(n1, n2)的例子如下:
                    0    0   0
h(n1, n2) =   0    0    0
                   -1 2   -1
⊙   垂直增強 增強映像垂直方向線條也是一種高通濾波。水平增強h(n1, n2)的例子如下:
                    -1    0   0
h(n1, n2) =   2    0    0
                   -1   0   0
⊙   水平垂直增強 水平垂直增強映像也是一種高通濾波。水平增強h(n1, n2)的例子如下:
                    -1    -1   -1
h(n1, n2) =   -1     8    -1
                   -1    -1   -1

● 結構濾波 
⊙   並聯型結構濾波
結構:

例如,當
                   0    0   0
h1(n1, n2) =   0    0    0
                   -1 2   -1
                    -1    0   0
h2(n1, n2) =   2    0    0
                   -1   0   0
則h(n1, n2)為
                    -1    0   0
h(n1, n2) =   2    0    0
                   -1   2   -1
⊙   串聯型結構濾波
結構:

例如,當
                   0    0   0
h1(n1, n2) =   0    0    0
                   -1 2   -1
                    -1    0   0
h2(n1, n2) =   2    0    0
                   -1   0   0
則h(n1, n2)為
                    1    -2   1
h(n1, n2) =   -2     4    -2
                  1   -2   1

7) 圖象的切換特效處理
● 上部和下部對接顯示
只需要不斷的同時描繪對稱的上部和下部的一行像素即可
● 左部和右部對接顯示
只需要不斷的同時描繪對稱的左部和右部的一列像素即可
● 四邊向中央顯示
只需要不斷的同時等進階的描繪四邊直至描繪到中心點即可
● 中央向四邊顯示
只需要不斷的從中心點同時等進階的描繪四邊直至描繪到邊緣即可
● 四角向中心顯示
從左上方,右下角分別同時沿著主對角線等進階的描繪自己所在像素的行,列像素直至中心
● 水平刪條
設定分割長度L, 然後分別從高度為L, 2L, 3L ... 處等進階的描繪行像素,顯然這裡進階所需描繪高度為L
● 垂直刪條
設定分割長度L, 然後分別從寬度為L, 2L, 3L ... 處等進階的描繪列像素,顯然這裡進階所需描繪寬度為L
● 由左向右(由右向左)
分別從左至右(從右至左)不斷的描繪列像素直至邊緣
● 由上向下(由下向上)
分別由上向下(由下向上)不斷的描繪行像素直至邊緣

8) 邊緣探測
在映像測量,模式識別時,從映像中抽出線條,檢測出映像邊緣或者抽出映像輪廓是最常用的操作。迄今為止,已經出現了許多成熟的演算法。例如微分演算法,掩模演算法等。在微分演算法中,常使用N*N的像素塊,例如3*3或者4*4。3*3的像素塊如下,
f(i-1,j-1) f(i-1,j) f(i-1,j+1)
f(i,j-1)     f(i,j)      f(i,j+1)
f(i+1,j-1) f(i+1,j) f(i+1,j+1)
我們不妨設f(i,j)為待處理的像素,而g(i, j)為處理後的像素。
● Roberts運算元
g(i, j) = sqrt( (f(i, j) - f(i + 1, j))^2 + (f(i + 1, j) - f(i, j + 1))^2 )
或者
g(i, j) = |f(i,j) - f(i + 1,j)| + |f(i+1,j) - f(i,j+1)|
● Sobel運算元
對數位影像的每一個像素f(i,j),考察它的上、下、左、右鄰域灰階的加權值,把各方向上(0度、45度、90度、135度)的灰階值加權之和作為輸出,可以達到提取映像邊緣的效果。
即 g(i,j) = fxr + fyr, 其中
fxr = f(i-1,j-1)+2*f(i-1,j)+f(i-1,j+1)-f(i+1,j-1)-2*f(i+1,j)-f(i+1,j+1)
fyr = f(i-1,j-1)+2*f(i,j-1)+f(i+1,j-1)-f(i-1,j+1)-2*f(i,j+1)-f(i+1,j+1)
● Laplace運算元
Laplace運算元是一種二階微分運算元。它有兩種形式:4鄰域微分運算元和8鄰域微分運算元。

⊙   4鄰域微分
g(i,j)=|4*f(i,j)-f(i,j-1)-f(i-1,j)-f(i+1,j)-f(i,j+1)|
⊙   8鄰域微分
g(i,j)=|8*f(i,j)-f(i,j-1)-f(i-1,j)-f(i+1,j)-f(i,j+1)-f(i-1,j-1)-f(i-1,j+1)-f(i+1,j-1)-f(i+1,j+1)|

● 其他常用運算元
⊙   右下邊緣抽出
採用3*3運算元時,運算式為
g(i,j)=|-2*f(i,j-1)-2*f(i-1,j)+2*f(i+1,j)+2*f(i,j+1)|
⊙   prewitt 邊緣探測樣板運算元
prewitt運算元是一個邊緣模板運算元,由八個方向的樣板組成,能夠在0度,45度,90度,135度,180度,225度角
等八個方向檢測邊緣。8個3*3邊緣模板及方向如下:
90度角:            45度角:
1   1   1            -1 -1 -1
1 -2   1            1 -2   1
-1 -1 -1            1   1   1
0度角:             315度角:
-1   1   1          1   1   -1
-1 -2   1         1 -2   -1
-1   1   1         1   1   -1
270度角:       225度角:
1   1    1          -1   -1 1
-1 -2 1         -1   -2   1
-1 -1 1           1    1   1
180度角:      135度角:
1   1   1           1   -1   -1
1 -2 -1          1    -2   -1
1 -1   -1          1    1      1
3*3時運算式如下:
A1*f(i-1,j-1)     A8*f(i,j-1)      A7*f(i+1,j-1)
A2*f(i-1,j)         -2*f(i,j)         A6*f(i+1, j)
A3*f(i-1,j+1)      A4*f(i,j+1)      A5*f(i+1,j+1)
g(i,j)=|-2*f(i,j)+A8*f(i,j-1)+A1*f(i-1,j-1)+A2*f(i-1,j)+A3*f(i-1,j+1)+A4*f(i,j+1)+A5*f(i+1,j+1)+A6*f(i+1,j)+A7*f(i+1,j-1)|
在程式設計中,依次用樣板去檢測映像,與被檢測地區最為相似的樣板給出最大值,用該最大值作為運算元的輸出值。
⊙   Robinson運算元
Robinson運算元是一個模板運算元,由八個方向的樣板組成,能夠在0度,45度,90度,135度,180度,225度角
等八個方向檢測邊緣。8個3*3邊緣模板及方向如下:
90度角:            45度角:
1    2   1            0   1 2
0   0    0            -1   0   1
-1 -2 -1           -2   -1   0
0度角:             315度角:
-1    0   1          -2 -1   0
-2   0    2         -1   0   1
-1    0   1          0   1   2
270度角:       225度角:
-1   -2   -1           0   -1 -2
0     0     0          1    0   -1
1    2 1            2    1   0
180度角:      135度角:
1    0   -1         2   1   0
2   0 -2          1    0 -1
1   0   -1          0 -1 -2
使用方法與prewitt運算元一樣。
⊙   Kirsch運算元
Kirsch運算元是一個模板運算元,由八個方向的邊緣樣板組成,能夠在0度,45度,90度,135度,180度,225度角
等八個方向檢測邊緣。8個3*3邊緣模板及方向如下:
90度角:            45度角:
5    5    5            -3    5    5
-3   0    -3           -3    0   5
-3 -3 -3           -3   -3   -3
0度角:             315度角:
-3   -3    5          -3 -3   -3
-3   0    5         -3   0   5
-3    -3    5         -3   5   5
270度角:       225度角:
5   5   -3           -3    -3 -3
5     0   -3          5    0   -3
-3   -3    -3         5   5   -3
180度角:      135度角:
5    -3   -3         5    5   -3
5   0 -3           5    0 -3
5   -3   -3           -3 -3 3
使用方法與prewitt運算元一樣。
⊙   Smoothed運算元
Smoothed運算元是一個3*3的運算元,設
        |-1 0 1|                |1 1 1|
Dx = |-1 0 1|        Dy = |0 0 0|
        |-1 0 1|                |-1 -1 -1|
則 D = sqrt(Dx^2 + Dy^2) 或者 D = |Dx| + |Dy|
或 Dx(i, j) = f(i-1,j+1)+f(i,j+1)+f(i+1,j+1)-f(i-1,j-1)-f(i,j-1)-f(i+1,j-1)
   Dy(i,j) = f(i-1,j-1)+f(i-1,j)+f(i-1,j+1)-f(i+1,j-1)-f(i+1,j)-f(i+1,j+1)

9) 灰階影像處理
所謂灰階處理是根據單色映像的灰階對輸出映像的灰階進行再定義、以改善映像的對比。單色映像的灰階有256級、128級、64級等,下面均以256級單色映像舉例。
我們不妨設源映像的灰階值為f(i,j),處理後的灰階值為g(i,j)
● 逆反處理
與彩色映像的逆反處理一樣: g(i,j) = 255 - f(i,j)
● 灰階級切換
灰階級切換的輸入、輸出灰階值對應關係如下:

● 增大對比
輸入的灰階值越高,對應的輸出灰階值越低。灰階值減少,映像變暗,從而使對比增加。

● 減小對比

● 改善對比

● 增強對比

● 局部濾波處理
局部濾波處理是指利用3*3的映像塊內的像素的顏色值對當前像素進行設定的一種影像處理技術。
⊙   平均值濾波
與彩色映像平滑處理類似。
g(i,j)=( f(i-1,j-1) + f(i-1,j) + f(i-1,j+1) + f(i,j-1) + f(i,j) + f(i,j+1) + f(i+1,j-1) + f(i+1,j) + f(i+1,j+1) ) / 9
這裡要注意的是對於邊緣的像素的情況,防止越界。
⊙   最小值濾波
最小值濾波是指在映像中以當前像素f(i,j)為中心切出一個N*M(例如3*3)像素組成的映像塊,g(i,j)取映像塊中灰階值中的最小值
⊙   最大值濾波
最大值濾波是指在映像中以當前像素f(i,j)為中心切出一個N*M(例如3*3)像素組成的映像塊,g(i,j)取映像塊中灰階值中的最大值
⊙   中值濾波
中值濾波是指在映像中以當前像素f(i,j)為中心切出一個N*M(例如3*3)像素組成的映像塊,g(i,j)取映像塊中所有灰階排序後序列的中間值

10) 灰階影像處理
● 灰階映像的二值化
⊙   灰階映像長條圖
對於每個灰階值,求出在映像中具有該灰階值的像素數的圖形叫做灰階長條圖。。灰階長條圖是灰階級的函數,描述映像中具有相同灰階像素的個數。灰階長條圖的橫座標是灰階級,縱座標是該灰階出現的頻率(即像素的個數)。長條圖的用途主要是給出了一個簡單可見的指示,用來判斷一幅映像是否合理的利用了全部被允許的灰階級範圍。一般一幅數位影像應該利用全部或幾乎全部可能的灰階級範圍。一般一幅數位影像應該利用全部或幾乎全部可能的灰階級,否則增加了量化間隔。一旦被數字化映像的級數小於255,丟失的資訊將不能恢複。如果映像具有超出數字量化器所能處理的範圍的亮度,則這些灰階級將簡單的置為0或255,由此將在長條圖的一端或兩端產生尖峰。灰階映像長條圖具有長條圖的一些統計特徵參量,包括了灰階最大值,灰階最小值,均值和標準差。
⊙   闕值計算和映像二值化
映像二值化的闕值處理方式為:
g(i,j) = 1;   f(i,j)>=t
g(i,j) = 0;   f(i,j)<t
通常,用g(i,j)=1表示映像,用g(i,)=0表示背景。確定t的方法叫做闕值選擇。
● 灰階映像的二值化演算法
⊙ 類判別法尋找闕值的步驟:
(1) 計算輸入映像的灰階級長條圖(用灰階級的機率函數PHS(i)來表示)
(2) 計算灰階均值(Ave) Ave = sigma((i - 1)*Phs(i)) i: 0->255
(3) 計算灰階類均值(Aver(k))和類長條圖和(W(k))
Aver(k) = sigma((i+1)*Phs(i)) i: 0->k
W(k) = sigma(Phs(i)) i: 1->k
(4)計算類分離指標
Q(k)={[Ave*W(k)-Aver(k)]^2)}/[W(k)*(1-W(k))]}
(5) 求使Q最大的k 最佳闕值: T = k - 1
⊙ 灰階級切片法

將輸入映像的某一灰階級範圍內的所有像素全部置為0(黑),其餘灰階級的所有像素全部置為255(白),則產生黑白
二值映像。
⊙ 等灰階片二值化

將輸入映像在某兩個等寬的灰階級範圍內的所有像素全部置為0(黑),其餘灰階級的所有像素全部置為255(白),則產生黑白二值映像。
⊙ 線性二值化

將輸入映像在某一灰階級內的所有像素全部置為0(黑),其餘灰階級的所有像素全部置為原值的1/2,則產生黑白二值映像,並將映像與背景分離。

● 二值影像處理
二值影像處理是指將二值化的映像進行某種修正,使之更適合於映像測量。二值影像處理包括以下操作:
膨脹 使粒子變大。對映像進行膨脹處理之後再進行收縮處理,則可以修正映像的凹槽
收縮 使粒子變小。對映像進行收縮處理之後再進行膨脹處理,則可以修正映像的凸槽
清除孤立點 清除由一個像素構成的對象以及修正由一個像素構成的孔。
清除粒子 清除任意麵積以下的對象
清除超大粒子 清除任意麵積以上的對象
洞穴填充 填充任意範圍
⊙ 4鄰域收縮
4鄰域收縮的原理是,在3*3的映像塊中,如果當前處理像素f(i,j)為0,則其相鄰的像素f(i,j+1),f(i,j-1),f(i-1,j),f(i+1,j)均置255。
⊙ 8鄰域收縮
8鄰域收縮的原理是,在3*3的映像塊中,如果當前處理像素f(i,j)為0,則其相鄰的像素f(i,j+1),f(i,j-1),f(i-1,j),f(i+1,j),f(i-1,j-1),f(i+1,j-1),f(i-1,j+1),f(i+1,j+1)均置255。
⊙ 4鄰域膨脹
4鄰域膨脹的原理是,在3*3的映像塊中,如果當前處理像素f(i,j)為1,則其相鄰的像素f(i,j+1),f(i,j-1),f(i-1,j),f(i+1,j)均置1。
⊙ 8鄰域膨脹
8鄰域膨脹的原理是,在3*3的映像塊中,如果當前處理像素f(i,j)為1,則其相鄰的像素f(i,j+1),f(i,j-1),f(i-1,j),f(i+1,j),f(i-1,j-1),f(i+1,j-1),f(i-1,j+1),f(i+1,j+1)均置1。
⊙ 8鄰域清除孤立點
8鄰域清除孤立點的原理是,在3*3的映像塊中,如果當前處理像素f(i,j)為1,而其相鄰的像素f(i,j+1),f(i,j-1),f(i-1,j),f(i+1,j),f(i-1,j-1),f(i+1,j-1),f(i-1,j+1),f(i+1,j+1)均為0時,當前處理像素f(i,j)為0。
⊙ 4鄰域清除孤立點
4鄰域清除孤立點的原理是,在3*3的映像塊中,如果當前處理像素f(i,j)為1,而其相鄰的像素f(i,j+1),f(i,j-1),f(i-1,j),f(i+1,j均為0時,當前處理像素f(i,j)為0。

本文來自CSDN部落格,轉載請標明出處:http://blog.csdn.net/xuerene2/archive/2008/12/15/3519194.aspx

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.