Я использую regionprops(img,'BoundingBox');
для создания ограничивающих рамок вокруг некоторых объектов на изображении. Координаты ограничивающих рамок (x
, y,
width
, height
) всегда отличаются на 0,5 от целочисленных значений. Почему это так?
Для меня это вызывает две проблемы:
- При использовании этих координат для доступа к массиву изображений я получаю предупреждение:
Warning: Integer operands are required for colon operator when used as index
. Я могу с этим жить, соответственно удалить сfloor
илиceil
, НО... - ... когда эти координаты близки к границам изображения, они вызывают ошибки, так как значения 0,5 и 1024,5 не совпадают с границами изображения 1 и 1024. Я получаю
Subscripted assignment dimension mismatch.
илиIndex exceed matrix dimensions.
, что правдоподобно.
Так может кто-нибудь объяснить мне:
- Зачем это делается?
- Как мне с этим работать при использовании координат для обрезки и замены областей изображения. Я хочу заменить именно то, что было обрезано
imcrop
, а округление немного условно (простое использованиеfloor
илиceil
не сработает, мне нужно будет проверить границы изображения, что не является проблемой, но кажется немного утомительным для довольно простого задача и, конечно, сомнительно, чтобы она использовалась таким образом...).
Ниже приведены некоторые фрагменты кода, с помощью которых я выдал ошибки для изображения 1024x1024.
bb_coords = [124.5 979.5 27 45]; % example for bounding box generated by regionprops
subregion = imcrop(img, bb_coords); % works fine with imcrop
% but when I want to use these coordinates for accessing the img array,
% I generally get a warning and in this case an error.
img( bb_coords(2):(bb_coords(2)+bb_coords(4)), ...
bb_coords(1):(bb_coords(1)+bb_coords(3))) = subregion;