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);

我做对了吗?以上是做狗的正确方法吗?我只是从wiki的解释中尝试过。但我无法像维基页面http://en.wikipedia.org/wiki/Difference_of_Gaussians那样获得所需的图像

高斯差

[已编辑]

我从维基页面引用这个

“高斯差是一种灰度图像增强算法,它涉及从原始灰度图像的另一个模糊版本中减去原始灰度图像的一个模糊版本。模糊图像是通过将原始灰度图像与具有不同标准的高斯核卷积获得的偏差。”

在阅读论文时,DoG 图像由

原始图像,I(x,y) -> 模糊 -> I1(x,y)

I1(x,y) -> 模糊 -> I2(x,y)

输出 = I2(x,y) - I1(x,y)

如您所见,这与我使用与原始图像不同的内核获取 I1 和 I2 的操作略有不同

哪一个是正确的,还是我误解了 wiki 中的含义?

4

1 回答 1

2

如果您附加的图像是您的示例输出,它不一定看起来是错误的。DoG 操作非常简单:用两个不同大小的高斯模糊并计算差异图像。这似乎是您的代码正在做的事情,所以我会说您做对了。

如果您的担忧源于查看 Wikipedia 文章(其中图像主要是白色,而不是黑色),那只是您所拥有的图像的反转。我不会担心的。

于 2012-12-02T14:06:46.060 回答