Copy object´s pixels to ones-matrix
1 vue (au cours des 30 derniers jours)
Afficher commentaires plus anciens
Mariana
le 12 Fév 2014
Commenté : Image Analyst
le 16 Fév 2014
Hello, I try following (for example):
[r, c] = find(bwlabel(BW)==2)
but I´ve found out that "r" and "c" vectors are the same length and they (probably) represent some sort of frame around an object rather then object itself. I wanted to use this function for replacing one-elements (pixel with value = 1) in ones matrix (matrix filled with ones (sorry for poor english) with pixel values of object copied... sth like: image2(r, c) = image1 (r, c) but the problem is that the background is "copied" also (and is unwanted, I want to have only the object copied)
Can you give an advice what is wrong (whether it is) or which better function I could use?
0 commentaires
Réponse acceptée
Walter Roberson
le 12 Fév 2014
idx = bwlabel(BW) == 2;
newmatrix = ones(size(originalmatrix));
newmatrix(idx) = originalmatrix(idx);
Or, following your existing code more closely,
[r, c] = find(bwlabel(BW)==2);
newmatrix = ones(size(originalmatrix));
nematrix(sub2ind(size(newmatrix),r,c)) = originalmatrix(sub2ind(size(newmatrix),r,c));
0 commentaires
Plus de réponses (2)
Image Analyst
le 12 Fév 2014
Another way using ismember()
labeledImage = bwlabel(BW);
twoValuedPixels = ismember(labeledImage, 2) > 0;
This gives a logical matrix use int32(twoValuedPixels) if you want int32 or double(twoValuedPixels) if you want a double.
1 commentaire
Image Analyst
le 16 Fév 2014
Regarding your "Answer"...No problem. You almost never want a list of individual row and column numbers for every single binary pixel. See my Image Segmentation Tutorial, BlobsDemo: http://www.mathworks.com/matlabcentral/fileexchange/?term=authorid%3A31862
Voir également
Catégories
En savoir plus sur Feature Detection and Extraction 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!