Matlab Frangi Filter Расширенные нежелательные объекты - PullRequest
0 голосов
/ 02 января 2019

Я использовал Matlab версию фильтра Франги , чтобы улучшить длинные и тонкие яркие пятна для моего текущего проекта. Это хорошо работает для разнородных данных. Тем не менее, я получил много нежелательных объектов при применении к контролируемым однородным данным. Большинство из них не длинные и тонкие функции. Я искал идеи для контроля эксцентриситета фильтра.

Вот код, который у меня есть

Img = imread('test.png');
Img = im2double(Img);
options = struct('FrangiScaleRange', [5 7], 'FrangiScaleRatio', 2, 'FrangiBetaOne', 0.5, 'FrangiBetaTwo', 15, 'verbose',true,'BlackWhite',true);
[IEnhance,~]=FrangiFilter2D(1-Img,options);
IEnhance = mat2gray(IEnhance);
imshow(IEnhance)

Я пытался не масштабировать данные, но выходные данные пустых данных и данных обнаружения имеют одинаковую интенсивность отклика.

1 Ответ

0 голосов
/ 09 января 2019

Я думаю, что это вызвано mat2gray.

Я предполагаю, что фильтр выводит различные числовые значения в зависимости от изображения, однако, когда вы вызываете mat2gray, вы автоматически масштабируете до min(IEnhance) и max(IEnhance).

FEX поставляется с изображением. Если мы запустим

Img = imread('vessel.png');
Img = im2double(Img); % autoscale input, 
options = struct('FrangiScaleRange', [5 7], 'FrangiScaleRatio', 2, 'FrangiBetaOne', 0.5, 'FrangiBetaTwo', 15, 'verbose',true,'BlackWhite',true);
[IEnhance,~]=FrangiFilter2D(Img,options);

imshow(IEnhance,[])
colorbar

enter image description here

Мы видим, что масштаб приближается к 3 * 10 ^ -5.

Вместо этого, если мы запустим ваше изображение как:

Img = imread('https://i.stack.imgur.com/OlNeb.png');
Img = im2double(Img);
options = struct('FrangiScaleRange', [5 7], 'FrangiScaleRatio', 2, 'FrangiBetaOne', 0.5, 'FrangiBetaTwo', 15, 'verbose',true,'BlackWhite',true);
[IEnhance2,~]=FrangiFilter2D(Img,options);

imshow(IEnhance2,[])
colorbar

enter image description here

В этом случае шкала переходит к 3 * 10 ^ 6

Если мы нанесем их в одном масштабе:

subplot(121)
imshow(IEnhance,[0 3e-5])
subplot(122)
imshow(IEnhance2,[0 3e-5])

enter image description here

Теперь вы можете видеть, что результат фильтра правильный, поскольку он обнаруживает случайный шум в качестве фона почти как случайный шум. Обратите внимание, что мы можем сделать это, потому что мы действительно автоматически масштабируем вход (im2double), и что входные изображения имеют одинаковый масштаб. Это не является важным допущением для отдельных приложений, так как большинство устройств будут выводить изображения в одном и том же масштабе, но в гипотетическом случае, если они не будут иметь одинаковый масштаб, интерпретация различных значений вывода будет не такой сопоставимой.

Урок для изучения: Выходные данные фильтра - это вероятность, а не автоматическое масштабирование вероятностей!


Обратите внимание, что в моих демонстрациях я изменил вызов filder так, чтобы он просто вызывал Img, так как именно так работает файл FEX. У вас, вероятно, есть причины, чтобы перевернуть его.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...