Classificação com eficiência de velocidade no Matlab
Eu tenho uma imagem de tamanho como RGBuint8(576,720,3)
onde eu quero classificar cada pixel para um conjunto de cores. Eu me transformei usandorgb2lab
do espaço RGB para o LAB e, em seguida, removeu a camada L, tornando-se agora umadouble(576,720,2)
consistindo em AB.
Agora, quero classificar isso para algumas cores que eu treinei em outra imagem e calculei suas respectivas representações AB como:
Cluster 1: -17.7903 -13.1170
Cluster 2: -30.1957 40.3520
Cluster 3: -4.4608 47.2543
Cluster 4: 46.3738 36.5225
Cluster 5: 43.3134 -17.6443
Cluster 6: -0.9003 1.4042
Cluster 7: 7.3884 11.5584
Agora, para classificar / rotular cada pixel em um cluster 1-7, atualmente faço o seguinte (pseudo-código):
clusters;
for each x
for each y
ab = im(x,y,2:3);
dist = norm(ab - clusters); // norm of dist between ab and each cluster
[~, idx] = min(dist);
end
end
No entanto, isso é terrivelmente lento (52 segundos) por causa da resolução da imagem e que eu passo manualmente através de cada xey.
Posso usar algumas funções internas que executam o mesmo trabalho? Deve haver.
Para resumir:Eu preciso de um método de classificação que classifique imagens de pixel em um conjunto de clusters já definido.