Qt - 图像类 - 非最大抑制 - C ++

时间:2016-06-11 12:47:38

标签: c++ qt qimage non-maximum-suppression

在编码某些像素操作类时,我实现了非最大抑制功能。

代码在这里:

#include <iostream>
#include <rapidjson/document.h>
#include <rapidjson/stringbuffer.h>
#include <rapidjson/writer.h>

using namespace rapidjson;

int main(void)
{
    const char* json = "{\"a\": \"valA\",\"b\": {\"ba\": \"valBA\",\"bb\": \"valBB\",\"bc\": \"valBC\"},\"c\": \"valC\"}";

    Document d;
    d.Parse<0>(json);

    Value& data = d["b"];

    Document d2;
    d2.SetObject();
    d2.AddMember("b", data, d2.GetAllocator());

    rapidjson::StringBuffer buffer;
    rapidjson::Writer<rapidjson::StringBuffer> writer(buffer);
    d2.Accept(writer);

    std::cout << buffer.GetString() << std::endl;

    return 0;
}

现在非最大抑制之前和之后的结果图片非常奇怪。 感觉就像某条线开始出现在蓝色之外。 请观看附图(非最大限制抑制前后)。

如果有任何帮助,我将感激不尽。

THX!

请忽略我在图像边缘的3像素错误,只是为了解灰度和高斯差异后的图像

Before Non max suppression

After Non max suppression

你能看到添加的行吗?它是什么?

1 个答案:

答案 0 :(得分:1)

您正尝试在适当的位置执行压制。考虑像素(col,row)。修改其内容后,下一个像素(col + 1,row)将具有不同的windowSize * windowSize邻域。

要解决此问题,您必须使用另一个数组作为输出。只需替换

    if(counter != ((windowSize * windowSize) - 1)){
        pointer[(row * GLOBAL_WIDTH) + col] = 0;
    }

    output[(row * GLOBAL_WIDTH) + col] =
              (counter != ((windowSize * windowSize) - 1)) ? 0 : current;