图像金字塔均值漂移滤波在某些维度的图像上出现错误?

3

我正在尝试使用金字塔运行均值漂移分割,就像在《学习OpenCV》书中解释的那样,在一些图像上。源图像和目标图像都是8位、三通道彩色图像,宽度和高度相同。然而,只有1600x1200或1024x768大小的图像才能得到正确的输出。其他大小为625x391和644x438的图像会导致运行时错误“输入参数的大小不匹配于函数cvPyrUp()”。我的代码如下:

IplImage *filtered = cvCreateImage(cvGetSize(img),img->depth,img->nChannels);
cvPyrMeanShiftFiltering( img, filtered, 20, 40, 1);

该程序使用示例中给出的参数。我尝试减小值,以为是图像尺寸问题,但没有成功。通过将图像尺寸调整为644x392和640x320,均值漂移可以正常运行。我读到“金字塔分割需要图像的大小是2的N次方倍,其中N是要计算的金字塔层数”,但这对此有什么作用吗?
请提供建议。
1个回答

1

好吧,除了在应用cvPyrMeanShiftFiltering时,你应该这样做:

  //A suggestion to avoid the runtime error
  IplImage *filtered = cvCreateImage(cvGetSize(img),img->depth,img->nChannels);
  cvCopy(img,filtered,NULL);

  //Values only you should know
  int level = kLevel;
  int spatial_radius = kSpatial_Radius;
  int color_radius = = kColor_Radius;

  //Here comes the thing
  filtered->width &= -(1<<level);
  filtered->height &= -(1<<level);

  //Now you are free to do your thing
  cvPyrMeanSihftFiltering(filtered, filtered,spatial_radius,color_radius,level);

问题在于这种金字塔形过滤器根据您使用的级别修改某些内容。试试这个,然后告诉我是否有效。希望能帮到你。


当我运行你的程序时,出现了一个运行时错误 - "Sizes of input arguments do not match (The input and output images must have same size) in function cvPyrMeanShiftFiltering"。你的代码发生了什么? - AruniRC
抱歉,我没有清楚理解您所说的“edition”。如果您指的是filtered->width这个问题:由于过滤后的图像大小正在改变,金字塔需要相同大小的图像,因此会出现错误消息。 - AruniRC
我是指宽度,改动是在处理之前将您的图像复制到过滤后的图像中。 - jsan
啊,好的。等我运行一下!双手交叉 - AruniRC
1
完美运行,非常感谢!现在你能否解释一下那段代码的作用? - AruniRC
这种分割方式实际上会根据您决定使用的每个级别改变图像大小。 - jsan

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接