Сегментация изображения на основе смешанных Гауссовых моделей
Изображения представлены в виде массивов пикселей. Отдельно взятый пиксель представляет собой скаляр (или вектор), который показывает интенсивность (или цвет). Смешанная Гауссова модель может быть использована для разделения пикселей на аналогичные сегменты для дальнейшего анализа изображения.
In[1]:=
![Click for copyable input](assets.ru/image-segmentation-with-gaussian-mixture-model/In_27.png)
pic = ExampleData[{"TestImage", "Aerial"}]
Out[1]=
![](assets.ru/image-segmentation-with-gaussian-mixture-model/O_25.png)
In[2]:=
![Click for copyable input](assets.ru/image-segmentation-with-gaussian-mixture-model/In_28.png)
pixels = Flatten[ImageData[pic]];
Визуализация распределения значений пикселей.
код на языке Wolfram Language целиком
Out[3]=
![](assets.ru/image-segmentation-with-gaussian-mixture-model/O_26.png)
Проанализируем значения пикселей с помошью трехкомпонентной смешанной Гауссовой модели.
In[4]:=
![Click for copyable input](assets.ru/image-segmentation-with-gaussian-mixture-model/In_30.png)
gmm = Quiet@
EstimatedDistribution[pixels,
MixtureDistribution[{p1, p2, p3}, {NormalDistribution[a1, a2],
NormalDistribution[b1, b2], NormalDistribution[c1, c2]}]];
Добавим описание для каждого пикселя с максимальной оценкой апостериорной вероятности (MAP).
In[5]:=
![Click for copyable input](assets.ru/image-segmentation-with-gaussian-mixture-model/In_31.png)
pxi = Table[PDF[dist, pixels], {dist, Last[gmm]}];
pxi = Transpose[pxi]/Total[pxi First[gmm]];
labels = ArrayReshape[Ordering[#, -1] & /@ pxi, ImageDimensions[pic]];
Визуализируем сегментированное изображение, и сравним его с исходным изображением.
код на языке Wolfram Language целиком
Out[6]=
![](assets.ru/image-segmentation-with-gaussian-mixture-model/O_27.png)