#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