2012-04-16 114 views
5

我正在使用SimpleCV來拼接圖像。我在SimpleCV的GitHub代碼中做了一些改變,並最終正確地轉換了圖像。但問題是,變換後圖像的顏色會發生變化。圖像拼接SimpleCV:變形後的顏色空間變化

我已經使用了這些圖像http://imgur.com/a/lrGw4。我的代碼的輸出是:http://i.imgur.com/2J722h.jpg

這是我的代碼:

from SimpleCV import * 
import cv2 
import cv 

img1 = Image("s.jpg") 
img2 = Image("t.jpg") 

dst = Image((2000, 1600)) 

# Find the keypoints. 
ofimg = img1.findKeypointMatch(img2) 

# The homography matrix. 
homo = ofimg[1] 
eh = dst.getMatrix() 

# transform the image. 
x = Image(cv2.warpPerspective(np.array((img2.getMatrix())), homo, 
    (eh.rows, eh.cols+300), np.array(eh), cv.INTER_CUBIC)) 

# blit the img1 now on coordinate (0, 0). 
x = x.blit(img1, alpha=0.4) 
x.save("rishi1.jpg") 

回答

3

看來你使用SimpleCV的舊版本。在最新的版本,以獲得單應矩陣的方式是[1]:

ofimg[0].getHomography() 

編輯:

好像你提的色差問題是由於顏色空間的變化。所以,請改變你的扭曲圖像到行:

x = Image(cv2.warpPerspective(np.array((img2.getMatrix())), homo, 
    (eh.rows, eh.cols+300), np.array(eh), cv.INTER_CUBIC), colorSpace=ColorSpace.RGB).toBGR() 

我懷疑發生的事情是,翹曲後返回的圖像是在BGR顏色空間,同時SimpleCV默認使用RGB色彩空間。請讓我知道它是怎麼回事。

+0

我正在使用github的SimpleCV的最新版本。我這樣做是因爲我在SimpleCV的代碼中做了一些改變。在此之前,單應性矩陣本身是錯誤的。但是現在圖像完全變形了,但變換圖像的顏色會發生變化。在findkeypointMatch函數中,我更改了一些代碼。這是我執行的變更https://github.com/ingenuitas/SimpleCV/pull/63/files。但顏色問題也在之前。 – Rishi 2012-04-16 17:06:43

+0

我編輯了答案。我不能完全運行你的代碼,但寫了一個類似的腳本,發現問題是倒置的顏色空間。 – fireant 2012-04-18 05:54:15

+0

真棒.. :)。你的邏輯完美無缺。 :)。謝謝。 – Rishi 2012-04-18 13:43:16