Как сделать множественный размер обнаружения в скользящем окне?

#matlab #image-processing #matrix #feature-selection #sliding-window

#matlab #обработка изображений #матрица #выбор функции #раздвижное окно #скользящее окно

Вопрос:

Я провожу исследование по обнаружению людей с использованием 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> . Я заметил, что невозможно объединить эти два разных размера матриц с помощью простой конкатенации.

У кого-нибудь есть идея, как решить мою проблему? По крайней мере, как объединить два разных размера матриц?

Спасибо

Комментарии:

1. Что такое Y и X ? это размер окна?

2. s это размер окна, и X и Y да, размер окна после умножения на исходный размер окна, s . Как указано выше, s = 0.8:0.2:1 . Итак, когда s будет 0.8 , я получу, что размер окна для Y равен 0.8*32 , и то же самое относится к X . @ifryed

Ответ №1:

Вам нужно сохранить размер окна обнаружения того же размера, HOG обучен находить объект размером 32X32. Если вы хотите найти объект в многомасштабном режиме, вам нужно повторно масштабировать изображение, но не окно обнаружения.

Измените эту строку:

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

К этому:

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

И это должно сработать.

Комментарии:

1. спасибо @ifryed, это сработало на самом деле для окна обнаружения. Но здесь моя проблема в том, что я хочу создать множественное окно обнаружения. Например, люди, находящиеся рядом с камерой, имеют размер головы в <32x32> пиксель, а люди, находящиеся далеко от камеры, имеют размер головы в <24x24> пиксель. Здесь я хочу создать систему, способную определять различный масштаб размера. У вас есть какие-нибудь идеи, как создать для этого код? спасибо @ifryed.

2. Я добавил код, идея состоит в том, чтобы сканировать голову с помощью того же детектора (32X32), но в другом масштабе изображения, если лицо находится далеко (кажется маленьким на картинке), если вы повторно масштабируете изображение, а затем сканируете его снова, это должно сработать. Вот как вы получаете multi-scale обнаружение.

3. вы имели в виду, что я не могу выполнить многомасштабное обнаружение в одном изображении и одном процессе. Поскольку здесь вы сказали, что мне пришлось повторно масштабировать изображение, а затем повторно сканировать его, это означает, что после сканирования исходного размера 32x32 я должен повторно масштабировать изображение для 24x24 и повторно сканировать его снова. Это правильно? или, я думаю, я не понимаю, что вы сказали. @ifryed спасибо,

4. У вас есть детектор размером 32 X 32, если вы запустите его на исходном изображении, вы найдете все головки размером 32X32, но если вы измените размер изображения на 2×2 м (где n — высота, а m — ширина исходного изображения) и отсканируете изображение еще раз, вы найдете все головки размером 16X16 в исходном изображении. итак, если вы хотите найти заголовки размером 24X24, затем повторно масштабируйте изображение на 32/24 = 1,33.

5. вы имели в виду, что мне нужно изменить размер изображения и нет необходимости изменять размер детектора, я прав? @ifryed