Сегментация изображения в градациях серого с использованием 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-изображений).

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

Другие вопросы по тегам