簡體   English   中英

Qt-圖像類-非最大抑制-C ++

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM