How to apply same 2D logical mask to each 3D layer effctively?
4 次查看(过去 30 天)
显示 更早的评论
RGB = imread('onion.png');
mask = RGB(:,:,1)>100;
%%How can I do something like below
RGB(mask,1:3) = 0; % I want to apply same 2D 'mask' for all the 3 layers
0 个评论
回答(1 个)
Image Analyst
2018-7-13
Try this:
% Mask the image using bsxfun() function to multiply the mask by each channel individually.
maskedRgbImage = bsxfun(@times, rgbImage, cast(mask, 'like', rgbImage));
7 个评论
Image Analyst
2018-7-13
It might be slightly faster but it's not general. It's depending on there being at least some red in every pixel of Im2 that you want to use as a mask. So it won't work for a general color where the shape in Im2 could be anything but would work in your specific computer graphics case.
Walter Roberson
2018-7-14
Using the multiply version can be faster sometimes because the multiply version on sufficiently large matrices can be sent to LAPACK for multithreaded execution.
另请参阅
类别
在 Help Center 和 File Exchange 中查找有关 Matrix Indexing 的更多信息
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!