我必须找到一个最大的八度与3x3x3邻域。这意味着我有四层在彼此之上,在这两层之间,我必须找到一个极大值。这里有一张图片作为说明这不是我所做的,但它代表了我的问题。
Octave layer image http://docs.opencv.org/trunk/_images/sift_dog.jpg
对于最大的压力,我发现:这里有一种快速的方法来解释图像中的极大值。这只是二维情况,但在三维空间中移动它不应该是一个问题。我现在的问题是对伪代码的理解我有伪代码:
问题是红色标记的部分。在这里我有for循环,但我不知道如何将“-[I,I+n]x[j,j+n]应用于循环这就是当下的解决方案:

//find local maxima after paper implementation not finished yet
private  Vector<Integer>  FindLocalMaximum(Image image)
{
     Vector<Integer> list = new Vector<Integer>();
       int n = 1;
       int step = 2*n + 1;

       for(int i = n; i < image.GetWidth()-n; i =step)
           for(int j = n; j < image.GetHeight()-n; j =step)
           {
               int mi = i;
               int mj = j;

               for(int i2 = i; i2 < i + n; i2++  )
                   for(int j2 = j; j2 < j + n; j2++  )
                       if(image.GetPixel(i2, j2) > image.GetPixel(mi, mj))
                       {
                           mi = i2;
                           mj = j2;
                       }
               boolean found = true;
               failed:
               for(int i2 = mi - n; i2 < mi + n; i2++  )
                   for(int j2 = mj - n; j2 < mj + n; j2++  )
                       if(image.GetPixel(i2, j2) > image.GetPixel(mi, mj))
                       {
                           found = false;
                           break failed;
                       }

              if(found)
              {
                  int pos = mj * image.GetWidth() + mi;
                  list.add(pos);
              }
           }

   return list;
}

所以这不起作用真是太奇怪了有人知道我在红标部分要做什么。

最佳答案

我给你举个伪代码的例子:

listA = [1, 2, 3]
listB = [a, b, c]

listA x listB = [(1, a), (1, b), (1, c), ...]

# excluded
listAe = [1, 3]
listBe = [a, b]

listAe x listBe = [(1, a), (1, b), ...]

# result
listA x listB - listAe x listBe = [(1, c), (2, a), (2, b), (2, c), (3, c)]

现在您应该只遍历结果对。

关于java - 伪代码非最大抑制,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/23992700/

10-10 05:47