#image-processing #matlab #matlab-cvst #mser
#обработка изображений #matlab #matlab-cvst #mser
Вопрос:
Я использую функцию detectMSERFeatures в наборе инструментов computer vision в MATLAB и столкнулся с несколькими ошибками. У меня есть черно-белое изображение, которое я считываю, чтобы определить особенности, однако я хочу инвертировать изображение перед запуском обнаружения объектов или фильтровать красный цвет в изображении. Поэтому в любом случае у меня есть двоичное изображение, которое я пытаюсь использовать в detectMSERFeatures. Я знаю, что это не работает, но я попробовал несколько преобразований в удобный формат, и ни одно из них, похоже, не сработало. detectMSERFeatures обнаружит функции, если я использую rgb2gray на исходном изображении, но не если я попытаюсь его преобразовать. Вот все, что я пробовал до сих пор:
Target1=imread('Decal0.JPG');
Target1bw=~im2bw(Target1);
Target=uint8(Target1bw);
[m,n]=size(Target);
regionsTarget = detectMSERFeatures(Target, 'MaxAreaVariation',0.15,...
'ThresholdDelta',15, 'RegionAreaRange',[10000 (m*n)/2]);
Target1=imread('Decal0.JPG');
Target1bw=~im2bw(Target1);
Target=im2double(Target1bw);
regionsTarget = detectMSERFeatures(Target, 'MaxAreaVariation',0.15,...
'ThresholdDelta',15, 'RegionAreaRange',[10000 (m*n)/2]);
Target1=imread('Decal0.JPG');
Target1bw=~im2bw(Target1);
Target2=255*Target1bw;
[m,n]=size(Target2);
Target3=zeros(m,n,3);
Target3(:,:,1)=Target2;
Target3(:,:,2)=Target2;
Target3(:,:,3)=Target2;
Target3=uint8(Target3);
Target=rgb2gray(Target3);
regionsTarget = detectMSERFeatures(Target, 'MaxAreaVariation',0.15,...
'ThresholdDelta',15, 'RegionAreaRange',[10000 (m*n)/2]);
Что я сделал неправильно?
Комментарии:
1. Опубликуйте свои исходные изображения, чтобы мы могли протестировать ваш код и получить результаты
2. Опубликуйте свою правку как ответ, это может быть полезно!
Ответ №1:
Я поднял вопрос до Mathworks, и это была ошибка в MATLAB. Вот их ответ:
«Мы обнаружили ошибку в detectMSERFeatures при обработке двоичных изображений. Обходным решением было бы использовать regionprops для определения областей для двоичных изображений. Тогда MSERRegions можно построить следующим образом:
props = regionprops(im2bw(newGrayTarget),'PixelList');
pixlist = {}
for i = 1:numel(props)
pixlist = [pixlist; int32(props(i).PixelList)]; end
r = MSERRegions(pixlist);
Спасибо за помощь!