代码之家  ›  专栏  ›  技术社区  ›  Binayaka Chakraborty

移动窗口实现

  •  0
  • Binayaka Chakraborty  · 技术社区  · 13 年前

    因此,我必须实现一种恒虚警率(CFAR)算法。它的工作原理是这样的: BackgroundWindow

    我使用的概念是,在目标窗口包含多个像素的情况下,该算子(CFAR)使用以下检测标准

    Equation2

    其中t是目标窗口中像素的平均值。在这种情况下,在PFA计算中,t应替换为tn(其中n是目标窗口中的像素数),其中b是背景平均值,b是背景标准偏差,t是检测器设计参数,该参数由PFA通过以下方程计算:

    Equation3

    现在,(方程已经足够了!XD),我知道我必须在图像(这是一个2d矩阵)上实现一些循环。我知道我的图像的像素与距离比(在两个方向上大约为10.054米/像素)。我可以将用户输入的距离转换为像素大小,假设背景窗口为800米(约80像素),保护窗口为400米(约40像素),而目标窗口为20米(约2像素)。我的问题是:

    如何在图像上循环?

    这个问题并不像看起来那么容易,至少对我来说不是。你看,对于mxn像素,我不知道如何实现移动窗口。起初,我认为目标大小是固定的,我可以对像素坐标进行硬编码,但这不是重点。如有任何帮助,不胜感激:)

    编辑: 目标窗口在防护窗口内移动。完成后,保护窗口将移动到背景窗口内,在那里将再次发生上述情况,然后最后背景窗口将在整个图像上移动!

    1 回复  |  直到 13 年前
        1
  •  2
  •   Dipto    13 年前

    假设窗口从左到右,然后从上到下,伪代码可能如下:

    考虑每个窗口的四个属性, bg_top , bg_left , bg_width , bg_hight , grd_top

    还考虑到内窗将永远不会穿过外窗向外,

    将左侧和顶部的所有窗口设置为图像的左侧和顶部,可以是(0,0)。

    现在是循环

    while(bg_top+bg_hight <= image_top+image_hight)
    {
        while(bg_laft+bg_width <= image_left+image_width)
        {
            while(grd_top+gdr_hight <= bg_top+bg_hight) 
            {   
                while(grd_left+gdr_width <= bg_left+bg_width)
                //some pixels may be left out if the inner and outer window sizes are not divisible, it will not change the window size to fit in the last case.
                {
                     while(target_top+target_hight <= grd_top+grd_hight)
                     {
                          while(target_left+target_width <= grd_left+grd_width)
                          // the condition will move till end but never goes outside nor changes the inner window size to fit
                          {
                              //DO THE PROCESSING
                              //target_left+=target_width; //if they do not overlap
                              target_left+=1; //if they overlap
                          }
                          target_top+=target_hight// don't overlap. use 1 for overlaping
                          // use 1 if it goes down 1 pixel
                     }
                     grd_left+=grd_width; //or 1
                }
                grd_top+=grd_hight; //or 1
             }
             bg_left+=bg_width; //or 1
         }
         bg_top+=bg_hight; //or 1
    }