2012-12-02 36 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。 –