Сегментация изображения в градациях серого с использованием GMM - PullRequest
0 голосов
/ 11 января 2019

Я ищу функции для выполнения сегментации медицинских изображений с шумом (оттенки серого) с помощью 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 Ответ

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

Неправильная функция. Вы ищете fitgmdist (X, k) , где вы вводите свою оценку количества сегментируемых объектов как k . Затем программа попытается вычислить mu и sigma, используя EM-алгоритм.

То, что плохо обусловленная ковариация создала - предупреждение типично, вы увидите это много, если ваши данные будут зашумлены. Я предлагаю регуляризация , изменяя параметр RegularizationValue, возможно устанавливая ограничения на ковариационные структуры и / или фильтруя зашумленное изображение. У меня всегда были хорошие результаты при использовании фильтров BM3D (для 2D-изображений) и BM4D (для 3D-изображений).

Я с радостью помогу, если у вас есть какие-то конкретные вопросы, но вам также придется выполнить домашнее задание по этому вопросу. Обработка изображений сложная, куча движущихся частей, с которыми вам нужно справиться, прежде чем даже основные вещи начнут работать надежно.

...