Обнаружение функций MATLAB MSER не работает

#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);
 

Спасибо за помощь!