How to compare two matrix?
2 vues (au cours des 30 derniers jours)
Afficher commentaires plus anciens
Tan Wen Kun
le 6 Déc 2015
Commenté : Walter Roberson
le 7 Déc 2015
redChannel = IM(:, :, 1);
greenChannel = IM(:, :, 2);
blueChannel = IM(:, :, 3);
for yourNumber = 1 : max(labelimg(:))
thisLabel = labelimg == yourNumber; % for example 2 or 3 or whatever region you want.
meanR(yourNumber) = mean(redChannel(thisLabel));
meanG(yourNumber) = mean(greenChannel(thisLabel));
meanB(yourNumber) = mean(blueChannel(thisLabel));
end
table(neigbor label)=
2 3 4 5
2 1
3 1 1
4 1 1 1
5 1 0 1 1
I got a table which show the neighbor label and I got mean rgb for each label, I just need loop through the left triangle because another part is same.
The mean value for the label is double type, how I can round to integer only?
I got the mean of each label region and then I now want to compare them.
for i=2 : max(table(:))
for j=2:max(table(:))
if(i,j+1)=1 %1 mean 2 label are neighbor
if compare(j+1,i)<=(rgb+-5) %then reassign the label
if (i>j+1) label i = label j+1 %always assign to smaller label
else label j+1 = label to i
Final result I hope to get is like this
label 4 and 5 is within(rgb+-5) with label 2 so all assign to label 2
label =
3 3 3 3 3 3
1 1 1 1 1 1
1 2 2 1 4 1
1 1 1 1 4 1
5 5 5 1 1 1
5 5 5 5 5 5
result =
3 3 3 3 3 3
1 1 1 1 1 1
1 2 2 1 2 1
1 1 1 1 2 1
2 2 2 1 1 1
2 2 2 2 2 2
0 commentaires
Réponse acceptée
Walter Roberson
le 6 Déc 2015
abs(meanR(j+1)-meanR(i)) <= 5 &&
abs(meanB(j+1)-meanB(i)) <= 5 &&
abs(meanG(j+1)-meanG(i)) <= 5
4 commentaires
Walter Roberson
le 7 Déc 2015
maxlab = max(label(:));
for i = 1 : maxlab
for j = 1 : maxlab - 1
if table(i,j+1) == 1
if abs(meanR(j+1)-meanR(i)) <= 5 &&
abs(meanB(j+1)-meanB(i)) <= 5 && abs(meanG(j+1)-meanG(i))
<= 5
if label(i, j+1) > label(i, j)
label(i, j+1) = label(i,j)
else
label(i,j) = label(i, j+1);
end
end
end
end
Plus de réponses (1)
Image Analyst
le 6 Déc 2015
The answer to "how I can round to integer only?" is to use the int32() function.
5 commentaires
Image Analyst
le 6 Déc 2015
I have no idea what that triangular table is so I can't answer. And I don't know what reassigning labels is going to do. I think you're trying to do some kind of region growing/merging because you started out with a bad segmentation that was made worse by oversegmentation by watershed and now you're trying to fix it in a way that won't work.
Voir également
Catégories
En savoir plus sur Data Distribution Plots dans Help Center et File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!