2017-10-28 271 views
-1

對於I類需要改造RGB圖像YIQ。 我們已被告知,該轉換可以通過進行:numpy的轉化RGB圖像YIQ色彩空間

transforming rgb to yiq

我開始寫與環的馬西代碼有矩陣乘法,然後我發現了一個功能

skimage.color.yiq2rgb(imYIQ) 

當我向裏面看看他們在做什麼時,我會說以下(我正在複製東西,所以它會更清晰):

yiq_from_rgb = yiq_from_rgb = np.array([[0.299,  0.587,  0.114], 
           [0.59590059, -0.27455667, -0.32134392], 
           [0.21153661, -0.52273617, 0.31119955]]) 
return np.dot(arr, yiq_from_rgb.T.copy()) 

arr僅僅是RGB PIC作爲基質

我試圖理解爲什麼這個工程?他們爲什麼要採用轉置矩陣? (.T) 當arr形狀與yiq_from_rgb不同時,點積如何工作?

+0

從[該文檔(https://docs.scipy.org/doc/numpy/reference/generated/numpy.dot.html#numpy.dot) - '對於2 d陣列它等價於矩陣乘法'。 – wwii

+0

也許它需要轉置,因爲圖像數組* *轉置*從所需的轉換規格? – wwii

+0

[座標約定](http://scikit-image.org/docs/dev/user_guide/numpy_images.html#coordinate-conventions) - 圖像數組的尺寸是(row,col,ch)。所以一個5x10的圖像將具有(10,5,3)的形狀;紅色通道是'arr [:,:,0]',藍色是'arr [:,:,1]'... – wwii

回答

1

在包含用於轉換的矩陣的參考圖中,變換矩陣是在RGB通道的左側。因此,在您的RGB圖像的第一像素,姑且稱之爲(p1r, p1g, p1b)對應於R,G,B通道分別,我們需要與變換矩陣相乘,總結的結果,如:

y1y = (0.299*p1r + 0.587*p1g + 0.114*p1b) 
y1i = (0.596*p1r - 0.275*p1g - 0.321*p1b) 
y1q = (0.212*p1r - 0.523*p1g + 0.311*p1b) 

其中(y1y,y1i,y1q)是在取整/取得int後,生成的YIQ圖像中第一個像素的值。我們對整個RGB圖像中的所有像素進行相同的乘法運算,並獲得所需的YIQ圖像。

現在,因爲它們在使用np.dot(arr, yiq_from_rgb.T),這整個實施有加權計算出正確的變換矩陣需要被調換。並且copy只是爲了這個轉換的目的而具有專門的轉置轉換矩陣。

另外,注意違揹你的身材,在np.dot() RGB陣列是變換矩陣的左側。

+0

我已經看到一些*表示*結果也需要除以255 。 – wwii

相關問題