【问题标题】:How to make multiple size of detection on sliding window?如何在滑动窗口上进行多种尺寸的检测?
【发布时间】:2014-08-24 04:07:06
【问题描述】:

我正在研究使用 HOG 和 LBP 进行人员检测。我想在图像上检测多个大小的人。我正在使用一个比例循环来检测窗口大小,然后它将通过滑动窗口检测来检测图像上的匹配特征。但是,由于矩阵的维度不同,我的代码会显示错误。这是我的代码:

win_size = [32, 32];  %the window size of detection

%loop on scale of window size
for s=0.8:0.2:1

    X=win_size(1)*s;
    Y=win_size(2)*s;

    %loop on column of image
    for y = 1:X/4:lastRightCol-Y

        %loop on row of image
        for x   = 1:Y/4:lastRightRow-X

            p1  = [x,y];
            p2  = [x+(X-1), y+(Y-1)];
            po  = [p1; p2] ;


            % CROPPED IMAGE
            crop_px    = [po(1,1) po(2,1)];
            crop_py    = [po(1,2) po(2,2)];

            topLeftRow = ceil(min(crop_px));
            topLeftCol = ceil(min(crop_py));

            bottomRightRow = ceil(max(crop_px));
            bottomRightCol = ceil(max(crop_py));

            cropedImage    = im(topLeftCol:bottomRightCol,topLeftRow:bottomRightRow,:);

            %Get the feature vector from croped image
            HOGfeatureVector{counter}= getHOG(double(cropedImage));
            LBPfeatureVector{counter}= getLBP(cropedImage);
            LBPfeatureVector{counter}= LBPfeatureVector{counter}';
            boxPoint{counter} = [x,y,X,Y];
            counter = counter+1;
            x = x+2;

        end
    end
end

我注意到问题出在HOGfeatureVector{counter},因为我使用不同的窗口大小,我从 HOG 获得的特征也有不同的维度。例如,我的窗口大小的原始比例是32x32,那么它会给我从HOG中提取特征后的维度为<6256x324>。然后,如果我把比例尺放在窗口大小上,例如:0.8:0.2:1,它会给我不同的尺寸,因为比例尺为 0.8,它会给我<6256x144> 和 32 的比例尺,<6256x324>。我注意到,不可能通过简单的串联来组合这两个不同的矩阵维度。

有人知道如何解决我的问题吗?至少,如何组合两个不同维度的矩阵?

谢谢

【问题讨论】:

  • 什么是YX?那是窗户的尺寸吗?
  • s 是窗口大小,XY 是与原始窗口大小相乘后的窗口大小,s。如上所述,s = 0.8:0.2:1。所以,当s0.8 时,我将得到Y 的窗口尺寸等于0.8*32X 也是如此。 @ifryed

标签: matlab image-processing matrix feature-selection sliding-window


【解决方案1】:

您需要保持检测窗口大小相同,训练 HOG 以在 32X32 中查找对象。 如果要在多尺度中找到对象,则需要重新缩放图像,而不是检测窗口。

改变这一行:

X=win_size(1)*s;
Y=win_size(2)*s;

到这里:

X=win_size(1);
Y=win_size(2);

它应该可以工作。

【讨论】:

  • 谢谢@ifryed,它实际上适用于检测窗口。但在这里,我的问题是我想创建多个检测窗口。例如,靠近相机的人的头部大小为<32x32> 像素,远离相机的人的头部大小为<24x24> 像素。在这里,我想制作一个能够检测不同大小比例的系统。你知道如何为它刮代码吗?谢谢@ifryed。
  • 我添加了代码,想法是使用相同的检测器(32X32)但在图像的不同比例上扫描头部,如果脸部很远(在图片中显得很小),如果你重新缩放图像,然后再次扫描它应该可以工作。这就是您获得multi-scale 检测的方式。
  • 你的意思是,我不能在一张图像和一个过程中进行多尺度检测。既然在这里,您说我必须重新缩放图像然后重新扫描它,意味着在扫描原始尺寸32x32 后,我必须重新缩放图像24x24 并重新扫描它。这是正确的吗?或者我想我不明白你所说的。 @ifryed 谢谢,
  • 您有尺寸为 32 X 32 的检测器,如果您在原始图像上运行它,那么您会发现所有尺寸为 32X32 的头部,但如果您重新调整图像大小为 2nX2m(其中 n 是原始图像的高度,m 是原始图像的宽度)并再次扫描图像,您会在原始图像中找到大小为 16X16 的所有头部。因此,如果您想找到大小为 24X24 的头部,则将图像重新缩放 32/24 = 1.33。
  • 你的意思是,我需要调整图像的大小而不需要重新调整探测器的大小,对吗? @ifryed
猜你喜欢
  • 2011-01-15
  • 2018-07-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-24
  • 2021-06-22
  • 2014-06-07
  • 1970-01-01
相关资源
最近更新 更多