Segmentação de imagem com um modelo mistura gaussiano
As imagens são representadas como arranjos de pixels. Um pixel é uma gradeza escalar (ou vector) que mostra a intensidade (ou cor). Um modelo mistura de Gauss pode ser usado para dividir os pixels em segmentos semelhantes para posterior análise.
In[1]:=
![Click for copyable input](assets.pt-br/image-segmentation-with-gaussian-mixture-model/In_27.png)
pic = ExampleData[{"TestImage", "Aerial"}]
Out[1]=
![](assets.pt-br/image-segmentation-with-gaussian-mixture-model/O_25.png)
In[2]:=
![Click for copyable input](assets.pt-br/image-segmentation-with-gaussian-mixture-model/In_28.png)
pixels = Flatten[ImageData[pic]];
Visualize a distribuição de valores de pixels.
mostre o input completo da Wolfram Language
Out[3]=
![](assets.pt-br/image-segmentation-with-gaussian-mixture-model/O_26.png)
Ajuste os valores de pixel em um modelo mistura gaussiano de três componentes.
In[4]:=
![Click for copyable input](assets.pt-br/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]}]];
Marque cada pixel com o componente mais provável com uma estimativa de máxima probabilidade a posteriori (MAP).
In[5]:=
![Click for copyable input](assets.pt-br/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]];
Visualize a imagem segmentada, e compare-a com a original.
mostre o input completo da Wolfram Language
Out[6]=
![](assets.pt-br/image-segmentation-with-gaussian-mixture-model/O_27.png)