36 views (last 30 days)

Show older comments

Hey again. I have a grayscale image and would like to highlight certain pixels by setting them to red, e.g.

save_array = image;

save_array(Omega==1) = %RED

Is there an easy way to do this? I will be taking the image (3D array), calculating the MIP (max intensity projection) by

mip_final = max(save_array, [], 3);

and would then like the red pixels to appear on the MIP (2D). So if a pixel is red anywhere in the z-dimension, it will appear red in the 2D MIP

Image Analyst
on 6 Aug 2018

Try this:

redChannel = grayImage; % Initialize

greenChannel = grayImage; % Initialize channel for green and blue channel.

redChannel(Omega) = 255;

greenChannel(Omega) = 0;

rgbImage = cat(3, redChannel, greenChannel, greenChannel);

Thorsten
on 8 Aug 2018

From the above discussion, I came up with this solution:

% fake some data

X = rand(10, 10, 23);

N = prod(size(X));

idx = randi(N, 1, round(0.01*N)); % 1% of all pixels are 1

X(idx) = 1;

Omega = X == 1; % find the values that are 1 in X

idx = sum(Omega, 3) > 0; % project to a 2D binary image

MIP = max(X, [], 3);

% create a color image from MIP

R = MIP; R(idx) = 1;

G = MIP; G(idx) = 0;

B = MIP; B(idx) = 0;

I = cat(3, R, G, B);

imshow(I)

Thorsten
on 9 Aug 2018

You can visualize only the red blocks using plotcube from the FileExchange:

X = rand(10, 10, 23);

% X = rand(3000,1000,600);

N = prod(size(X));

idx = randi(N, 1, round(0.01*N)); % 1% of all pixels are 1

X(idx) = 1;

[x, y, z] = ind2sub(size(X), idx);

for i = 1:numel(x)

plotcube([1, 1, 1], [x(i) y(i) z(i)], .8, 'r')

if i == 1, hold on, end

end

axis equal

grid on

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

Start Hunting!