[英]How can I provide feedback from a non-Qt C++ library class to a Qt GUI?
[英]Qt - Image class - Non max suppression - C++
在編碼某些像素操作類時,我實現了非最大抑制功能。
代碼在這里:
signed char * nonMaxSuppress(int windowSize, signed char * pointer) {
int delta = windowSize / 2;
int index;
int counter = 0;
signed char current;
for(int row = 3; row < GLOBAL_HEIGHT - 3; ++row)
{
for(int col = 3; col < GLOBAL_WIDTH - 3; ++col)
{
counter = 0;
current = pointer[(row * GLOBAL_WIDTH) + col];
for(int i = 0; i < windowSize; ++i)
{
for(int j = 0; j < windowSize; ++j)
{
index = ((row - delta + i) * GLOBAL_WIDTH) + (col - delta + j);
if(current > pointer[index]) {
counter++;
}
}
}
if(counter != ((windowSize * windowSize) - 1)){
pointer[(row * GLOBAL_WIDTH) + col] = 0;
}
}
}
return pointer;}
現在,在非最大抑制之前和之后產生的圖像非常奇怪。 感覺好像有些線開始突然出現。 請觀看附帶的圖片(非最大抑制之前和之后)。
如有任何幫助,我將不勝感激。
謝謝!
請忽略我在圖像邊緣出現的3個像素錯誤,只為您所知,這些圖像在經過灰度和高斯衍射之后
您能看到添加的行嗎? 它是什么?
您試圖就地執行抑制。 考慮像素(行,行)。 修改其內容后,下一個像素(col + 1,行)將具有不同的windowSize * windowSize鄰域。
要解決此問題,您必須使用另一個數組作為輸出。 只需更換
if(counter != ((windowSize * windowSize) - 1)){
pointer[(row * GLOBAL_WIDTH) + col] = 0;
}
與
output[(row * GLOBAL_WIDTH) + col] =
(counter != ((windowSize * windowSize) - 1)) ? 0 : current;
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.