积分图像边框处理

时间:2014-05-09 11:24:18

标签: algorithm image-processing feature-detection surf

我有一个积分图像,我从一个普通的灰色图像计算出来。我检查了它,它看起来像这样:

http://i.stack.imgur.com/qOdHa.jpg

现在我在积分图像上应用了一些Box滤镜,例如SURF中使用的Box滤镜。

http://i.imgur.com/bPc8bfN.png

现在我的问题是滤镜在Image角落处作出反应。我认为它来自过滤箱的外移。所以现在我知道我必须实施一些边界处理。首先,我认为将Integralimage的第一行和第一列设置为零会有所帮助,但它没有帮助。 我在Stackoverflow上找到了这个:

Dealing with Boundary conditions / Halo regions in CUDA

将此技术应用于Integralimage的最佳方法是什么?为积分图像构建一些边缘镜像,夹具等是否有意义?或者我应该使用InputeImage来计算积分图像?有人有经验或有一种典型的方法来处理这个问题吗?

编辑:

“相反,当你在边境时,你想要在你的过滤器代码中做一些索引。”好的,此刻我这样做,所以我只能重复一遍,IntegralImage的第一列和第一行是零。

int GetBoxIntegral(int xUp, int yUp, int xBot, int yBot)
{
    yUp = Math.min(Math.max(0, yUp), m_integralImage.GetHeight() - 1); 
    xUp = Math.min(Math.max(0, xUp), m_integralImage.GetWidth() - 1);
    yBot = Math.min(Math.max(0, yBot), m_integralImage.GetHeight() - 1);
    xBot = Math.min(Math.max(0, xBot), m_integralImage.GetWidth() - 1);



    int A = 0, B = 0, C = 0, D = 0;
    A = m_integralImage.GetPixel(xUp, yUp);
    B = m_integralImage.GetPixel(xBot, yUp);
    C = m_integralImage.GetPixel(xUp, yBot);
    D = m_integralImage.GetPixel(xBot, yBot);

    return Math.max(0, A + D - B - C);
}

1 个答案:

答案 0 :(得分:0)

1)"将这些技术应用于我的Integralimage的最佳方法是什么?"这一切都取决于你想要的结果。例如,对于特征检测,没有必要赶上靠近边框的像素,并且所有滤镜都应位于图像内。

2)"为积分图像构建一些边缘镜像,夹具等是否有意义?或者我应该使用InputeImage来计算积分图像?"更快地构建带边框的整体图像,可以减少计算量。

3)"有经验的人还是有一种典型的方法可以解决这个问题?"我知道2种典型的解决方案首先,忽略需要在图像外进行计算的所有像素(特征检测)。其次,夹紧整数图像查询的矩形(框模糊滤镜)。