Сегментация изображения в градациях серого с использованием GMM
Я ищу функции для выполнения сегментации медицинских изображений с шумом (в оттенках серого) с помощью GMM (Gaussian Mixture Models).
Я нашел в MATLAB:
gm = gmdistribution(mu,sigma)
idx = cluster(gm,X)
дано X
серое изображение.
Как бы вы определили mu
а также sigma
? Какого размера они должны быть? И как бы вы их инициализировали?
Я пробовал следующее (учитывая изображение размера (576x720)):
mu = rand(5,size(X,2));
sigma = ones(720,720);
gm = gmdistribution(mu,sigma);
idx = cluster(gm,X);
но я получаю ошибку:
Ошибка при использовании
wdensity
(строка 29)
Создана плохо обусловленная ковариация.Ошибка в
gmdistribution
/cluster
(строка 59)log_lh=wdensity(X,obj.mu, obj.Sigma, obj.PComponents, obj.SharedCov, CovType);
У меня есть общее представление о том, как работает GMM, то есть мягкая кластеризация, но я хотел бы помочь более опытному человеку понять, что я здесь делаю.
1 ответ
Неправильная функция Вы ищете fitgmdist (X, k), где вы вводите свою оценку количества объектов, которые будут сегментированы как k. Затем программа попытается вычислить mu и sigma, используя EM-алгоритм.
Это плохо обусловленная ковариация, созданная - предупреждение типично, вы увидите это много, если ваши данные зашумлены. Я предлагаю регуляризацию, изменяя параметр RegularizationValue, возможно устанавливая ограничения на ковариационные структуры и / или фильтруя зашумленное изображение. У меня всегда были хорошие результаты при использовании BM3D (для 2D-изображений) и BM4D- фильтров (для 3D-изображений).
Я с радостью помогу, если у вас есть какие-то конкретные вопросы, но вам также придется выполнить домашнее задание по этому вопросу. Обработка изображений сложная, куча движущихся частей, с которыми вам нужно справиться, прежде чем даже основные вещи начнут работать надежно.