Arhn - архитектура программирования

как вырезать несколько объектов из изображения в Matlab

Это код обнаружения объекта из видео.

Я хочу обрезать объекты из этого видео кадр за кадром.

videoSource = vision.VideoFileReader('viptraffic.avi','ImageColorSpace','Intensity'...
'VideoOutputDataType','uint8');

detector = vision.ForegroundDetector(...
   'NumTrainingFrames', 5, ... 
   'InitialVariance', 30*30);

 blob = vision.BlobAnalysis(...
   'CentroidOutputPort', false, 'AreaOutputPort', false, ...
   'BoundingBoxOutputPort', true, ...
   'MinimumBlobAreaSource', 'Property', 'MinimumBlobArea', 250);

 shapeInserter = vision.ShapeInserter('BorderColor','White');

videoPlayer = vision.VideoPlayer();

while ~isDone(videoSource)

 frame  = step(videoSource);
 fgMask = step(detector, frame);
 bbox   = step(blob, fgMask);
 out    = step(shapeInserter, frame, bbox); 
 step(videoPlayer, out); 
end
release(videoPlayer);  
release(videoSource);

когда я хочу обрезать bbox из фрейма, он всегда выдает ошибку «недопустимые входные аргументы»

если я напишу эту команду.

 frame(bbox(1):bbox(1)+bbox(3), bbox(2):bbox(2)+bbox(4), :);

Вышла ошибка "Индекс превышает размеры матрицы". пожалуйста, помогите мне, как обрезать объекты с изображения


Ответы:


1

Пытаться

frame(bbox(2):bbox(2)+bbox(4), bbox(1):bbox(1)+bbox(3), :);

Значения в bbox имеют формат [ x y w h ], тогда как индексы в frame должны быть в порядке строк-столбцов: вам нужно изменить порядок x и y на строку-столбец.

16.11.2014
  • Я не знаю, как изменить x любой y на строку-столбец @Shai 16.11.2014
  • @ user3551081 вы просто меняете порядок, как я написал в своем ответе. Попробуйте найти разницу между вашей строкой кода и моей. 16.11.2014
  • используйте режим отладки и проверьте размер frame и расположение bbox. Вам может пригодиться команда dbstop if error. 16.11.2014
  • Если вы используете приведенный выше синтаксис, вам необходимо убедиться, что координаты ограничивающей рамки с шириной и высотой должны быть целыми числами. Я подозреваю, что так и будет, но всегда кое-что нужно иметь в виду. Кроме того, FWIW, используйте вместо этого imcrop. Вы можете добиться того же самого: out = imcrop(frame, bbox);. 16.11.2014
  • Функция imcrop @rayryeng также выдает ошибку, о которой я уже упоминал. 16.11.2014
  • Тогда ваша ограничительная рамка явно неверна. Не знаю, что тебе сказать. Сделайте то, что предложил Шай, и отладьте свой код. Посмотрите, что такое bbox, а также размер вашего изображения. В наши обязанности не входит отладка вашего кода. 16.11.2014
  • @DarkVampire также возможно, что bbox пусто - для определенного кадра объект не обнаружен. Вы также должны проверить это. 16.11.2014
  • да, это тоже возможно, и я уже поставил условие if, чтобы проверить, пуст ли bbox, не обрезать из кадра 16.11.2014
  • @DarkVampire Обновите свой пост, указав текущий код. Этот бизнес туда-сюда немного утомляет. 16.11.2014

  • 2

    Вам нужно обработать случаи, когда ящики не обнаружены (bbox пусто) и когда обнаружено более одного ящика (bbox - матрица M на 2).

    Итак, у вас должен получиться цикл:

    for i = 1:size(bbox, 1)
      croppedImage = frame(bbox(i, 2):bbox(i, 2)+bbox(i, 4), bbox(i, 1):bbox(i, 1)+bbox(i, 3), :);
      % do something wiht croppedImage
    end
    

    В качестве альтернативы вы можете использовать функцию imcrop:

    croppedImage = imcrop(bbox(i, :));
    

    Просто имейте в виду, что imcrop вернет массив на 1 пиксель меньше по x и y, чем другой подход.

    18.11.2014
    Новые материалы

    Коллекции публикаций по глубокому обучению
    Последние пару месяцев я создавал коллекции последних академических публикаций по различным подполям глубокого обучения в моем блоге https://amundtveit.com - эта публикация дает обзор 25..

    Представляем: Pepita
    Фреймворк JavaScript с открытым исходным кодом Я знаю, что недостатка в фреймворках JavaScript нет. Но я просто не мог остановиться. Я хотел написать что-то сам, со своими собственными..

    Советы по коду Laravel #2
    1-) Найти // You can specify the columns you need // in when you use the find method on a model User::find(‘id’, [‘email’,’name’]); // You can increment or decrement // a field in..

    Работа с временными рядами спутниковых изображений, часть 3 (аналитика данных)
    Анализ временных рядов спутниковых изображений для данных наблюдений за большой Землей (arXiv) Автор: Рольф Симоэс , Жильберто Камара , Жильберто Кейрос , Фелипе Соуза , Педро Р. Андраде ,..

    3 способа решить квадратное уравнение (3-й мой любимый) -
    1. Методом факторизации — 2. Используя квадратичную формулу — 3. Заполнив квадрат — Давайте поймем это, решив это простое уравнение: Мы пытаемся сделать LHS,..

    Создание VR-миров с A-Frame
    Виртуальная реальность (и дополненная реальность) стали главными модными терминами в образовательных технологиях. С недорогими VR-гарнитурами, такими как Google Cardboard , и использованием..

    Демистификация рекурсии
    КОДЕКС Демистификация рекурсии Упрощенная концепция ошеломляющей О чем весь этот шум? Рекурсия, кажется, единственная тема, от которой у каждого начинающего студента-информатика..