logical indexing 3d array with 2d array

5 Ansichten (letzte 30 Tage)
RuiQi
RuiQi am 17 Jan. 2017
Bearbeitet: Stephen23 am 17 Jan. 2017
how can i set the values of my matrix to a certain rgb value given a mask ?
image_a; %(640x480x3) uint8
mask; %(640x480x1) logical mat
image_a(mask) = cv::RGB(255,200,0);

Akzeptierte Antwort

Stephen23
Stephen23 am 17 Jan. 2017
Bearbeitet: Stephen23 am 17 Jan. 2017
Exactly like I showed you in your earlier identical question (Method 2):
A(mask(:,:,[1,1,1])) = value
If you have a single RGB value that you want to allocate to the masked points then use imoverlay from the image processing toolbox:
B = imoverlay(A,mask,rgb)
If you do not have the image processing toolbox then you can get much the same effect by using bsxfun:
B = bsxfun(@times,A,~mask) + bsxfun(@times,rgb,mask)
where rgb is a single triple of size 1*1*3, and both mask and rgb are of the same class as the image A.
  1 Kommentar
James Tursa
James Tursa am 17 Jan. 2017
OP has three different values he wants to set for the planes. So this is a slightly different question. E.g.,
image_a(mask(:,:,[1,1,1])) = repmat(value(:)',sum(mask(:)),1);

Melden Sie sich an, um zu kommentieren.

Weitere Antworten (0)

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by