在编码某些像素操作类时,我实现了非最大抑制功能。
代码在这里:
#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像素错误,只是为了解灰度和高斯差异后的图像
你能看到添加的行吗?它是什么?
答案 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;