2012-12-02 63 views
0

我不知道我是否正確地做了。[編輯]實現高斯的差異

IplImage *dog_1 = cvCreateImage(cvGetSize(oriImg), oriImg->depth, oriImg->nChannels); 
IplImage *dog_2 = cvCreateImage(cvGetSize(oriImg), oriImg->depth, oriImg->nChannels); 

int kernel2 = 1; 
int kernel1 = 5; 

cvSmooth(oriImg, dog_2, CV_GAUSSIAN, kernel2, kernel2); 
cvSmooth(oriImg, dog_1, CV_GAUSSIAN, kernel1, kernel1); 
cvSub(dog_2, dog_1, dst, 0); 

我在做正確的方法嗎?以上是做DOG的正確方法嗎?我剛剛從wiki的解釋中試了一下。但我無法得到所需的圖像像維基頁面http://en.wikipedia.org/wiki/Difference_of_Gaussians

Difference of Gaussians

[編輯]

我舉這個來自維基頁面

「高斯差分是灰度圖像增強算法即從原始灰度圖像中減去原始灰度圖像的一個模糊版本,通過將原始灰度圖像與具有不同標準偏差的高斯內核進行卷積來獲得模糊圖像。

在閱讀紙,狗圖像通過

完成

原始圖像,I(X,Y) - >模糊 - > I1(X,Y)

I1(X,Y) - >變模糊 - > I2(X,Y)

輸出= I2(X,Y) - I1(X,Y)

正如你看到這是一個從我在做什麼略有不同,我得到了I1和I2使用不同的內核來自原始圖像

哪一個是正確的,或者我誤解了wiki中的含義?

+0

這是純粹的C問題嗎? –

+0

是的。使用C API。 – Mzk

回答

2

如果您附加的圖像是您的示例輸出,它不一定看起來錯了。 DoG操作非常簡單:使用兩個不同大小的高斯模糊並計算差異圖像。這似乎是你的代碼在做什麼,所以我會說你是對的。

如果您的擔心源於查看維基百科文章(圖像主要是白色,而不是黑色),則它只是圖像的反轉。我不會爲此擔心。

+0

謝謝克里斯。使用openCV,執行DoG很簡單嗎?我搜索了一些和八度有關的東西。那是什麼?爲什麼我們需要幾個八度? – Mzk

+0

我支持克里斯關於你對示例圖片的擔憂的看法:你只需要反轉它,就是+1。 –