gpt4 book ai didi

java - 伪代码非极大值抑制

转载 作者:塔克拉玛干 更新时间:2023-11-03 06:26:53 24 4
gpt4 key购买 nike

我必须在邻域为 3x3x3 的 Octave 中找到最大值。这意味着我有四层彼此叠加,并且在这些层之间我必须找到最大值。为了说明这里的图像。这不是我正在做的,但它代表了我的问题。

Octave layer image http://docs.opencv.org/trunk/_images/sift_dog.jpg

现在为了最大程度地抑制我发现这篇论文:Efficient Non-Maximum Suppression .这是一种在图像中找到最大值的快速方法。这只是 2D 情况,但在 3D 空间中移动它应该不是问题。我现在的问题真的是伪代码的理解。我有伪代码:

Pseudo-Code

问题是红色标记的部分。我有 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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com