2014年6月10日 星期二

可視浮水印

可視浮水印做法有許多種。

較簡單的方法就是將兩張圖片,重疊的部分的RGB都相加除以二。

這樣可以保留兩張圖片平均的RGB,所產生的落差看起來就會有浮水印的效果。

實驗結果:


2014年6月2日 星期一

RGB to HSI & Skin color detection

Converting color from RGB to HSI

HSI Color Model是一種將RGB色彩模型中的點在圓柱座標系中的表示法。

HSI分別為: Hue(色相)、Saturation(飽和度)、Intensity(亮度)。

而在HSI Color Model下可以對影像做許多處理。

RGB to HSI的核心轉換公式為


以lena圖來做RGB to HSI實驗

原圖



取Intensity之結果



取Saturation之結果



取Hue之結果





Skin color detection

針對影像的Hue與Saturation做限制,可以初步取出膚色區域。
Hue範圍約為 0 ~ 50
Saturation範圍約為 0.23 ~ 0.68


實驗結果


但對某些圖片而言,針對HSI調整而得到的偵測膚色的效果沒有那麼好。
如果進一步轉成YCbCr,再找出膚色範圍,可以得到比較好的效果。

轉換公式:

膚色範圍大約是 98<Cb<142    133<Cr<177

結果





2014年5月5日 星期一

DFT & Gaussian low pass filter

此次實做對圖片的DFT與IDFT
並分別在frequency domain 與 spatial domain上實做Gaussian low pass filter

流程為:

1.  輸入一張M*N的圖 f(x,y)

2.  對該圖做zero-padding,pad成 2M*2N 大小的圖 fp(u,v) (原圖保持在左上方)

3.  為了頻譜可以置中,將fp(u,v)奇數點乘上(-1)

4.  對fp(u,v)做DFT得到F(u,v),
                                  以spectrum方式表達: sqrt ( | R * R + I * I  | ),R為實部、I為虛部。
                                  以phase angle方式表達:  arctan( I / R ) ,R為實部、I為虛部。


5.  計算D(u,v)與H(u,v)
P=2M , Q=2N  (中心點)

D0可設定

6.  計算 F(u,v) * H(u,v) 然後對結果做IDFT 所得即為Gaussian low pass filter在頻域作用後的結果。


7.  針對spatial domain 的 Gaussian low pass filter 先以下列公式做出Gaussian mask
      之後再以此mask對原圖做Convolution




以 128*128 的lena做實驗



照上述流程,做DFT後的結果。




                     以phase angle表示



以frequency spectrum表示 ( 有經過log處理,使圖片明亮。公式 : log ( 1+  sqrt ( | R * R + I * I  | )  ) )




對頻域做gaussian filter




                                    原圖                         D0 = 50                     D0=20



對空間域做gaussian filter


                                            原圖             mask大小:3*3       mask大小:5*5
                                                               σx,σy都為1.414      σx,σy都為3

2014年3月26日 星期三

Histogram equalization and Sobel Operators

1.    Histogram equalization

影像增強技術,是為了讓顏色過度集中於某一亮度範圍而導致不清楚的圖片能變得更清晰,把每個像素的顏色重新分配到平均的亮度範圍上。

為了達成影像增強的效果,可以利用Histogram equalization的統計方法來實現。

核心公式:


此一公式是將原本的分佈重新分配到一個uniform distribution來達到平均分配的效果。

範例:
(a)原圖                                  (b)H.E.過後的圖

            (c)原圖彩度分佈              (d)H.E.過後圖的彩度分佈

2.    Sobel Operators


應用在邊緣偵測上的filter有許多種,而Sobel Operators就是普遍的其中一種。


Sobel filter:
                                                          (e)水平方向         (f)垂直方向

核心公式:
水平(gx)與垂直(gy)必須分開計算,更精細的結果應該是(gx+gy)^(1/2),但此一過程較為複雜,所以用接近的 | gx | + | gy | 代替。


範例:
                               (g)原圖                         (h)透過Sobel Operators後的圖



2014年3月13日 星期四

影像縮放 與 影像旋轉

影像縮放有三種常用的方法,分別為

(1) Nearest Neighbor
(2) Bilinear
(3) Bicubic

影像旋轉則是運用一些三角函數概念便可實作
(4) Rotation


1. Nearest Neighbor

Nearest Neighbor的作法是將想要輸出的圖像中的每個像素的座標乘上一個比例(原圖大小/輸出圖大小),可得一對應到原圖上的座標。



 i * (w1/w2) = m’             (對應到原圖上的x座標)
 j * (h1/h2) = n’                        (對應到原圖上的y座標)

然後將所對應到的座標上的顏色assign到輸出圖的座標上,由於所得的m’ n’ 有可能不是整數,因此找離m’n’最接近的整數mn。所以要將原圖( m, n )這點的顏色assign到輸出圖的( I, j )上。

將每個點經過上述過程處理之後,就可得到一縮放後的結果,此作法較簡單但輸出圖會較粗糙


2. Bilinear

此種方法先是將輸出圖的每個像素的座標,依比例對應到原圖的座標上。


  i * (w1/w2) = m’             (m’對應到原圖上的x座標)
j * (h1/h2) = n’                        (n’對應到原圖上的y座標)

Nearest Neighbor不同,m’n’不是找最接近的整數值,而是找相鄰的四個點並依照下列公式內插出一個相對平滑的顏色assign到輸出圖的(i,j)當中。

          color(a,b) * (1-alpha) * (1-beta)
        + color(a+1,b) * (alpha) * (1-beta)
        + color(a,b+1) * (1-alpha) * (beta)
        + color(a+1,b+1) * (alpha) * (beta)

此一公式的核心原理就是原圖中離(m’,n’)較近的四個像素中,距離越近的影響力越大。

這一個方法相較於Nearest Neighbor之下,較為平滑。


3. Bicubic

此方法將輸出圖的座標對應到原圖後,使用微分的方法推出一多項式,將對應座標與鄰近的16個像素以該多項式內插,便能得到比前兩者更為平滑的影像,缺點是必須耗費更多的運算資源,較花時間。



三種方法將512*512lena圖放大到1024*1024的比較

Nearest Neighbor


Bilinear


Bicubic



觀察眼睛的部分,Nearest Neighbor產生明顯的方格狀。BilinearBicubic較為平滑,Bilinear略顯模糊,Bicubic最為平滑。


4. Rotation
     
影像旋轉的核心公式是

sin(A+B) = sin(A)cos(B)+sin(B)cos(A)
cos(A+B) = cos(A)cos(B)-sin(A)sin(B)


以每張圖的中心點當作轉軸,若想要轉N度,將輸出圖的每一點以上列公式推出逆轉N度後的位置,若有對應到原圖上,就將原圖的顏色assign到輸出圖上,這樣就可以完成影像旋轉。



 影像旋轉結果