Retrieving the lung pixels through matrix operations with images

1 vue (au cours des 30 derniers jours)
I have two images, an original CXR, and its corresponding lung mask. I would like to perform an operation with these two images, to generate only the lung ROI from the original CXR and make the rest of the background black. The resultant image should be in RGB as the original CXR and mask, and not grayscale or binary. I tried performing bitwise multiplications and X-OR operations but doesn't work. Can you suggest me the code to do this?
>>
  1 commentaire
KALYAN ACHARJYA
KALYAN ACHARJYA le 11 Août 2018
I have edited the answer, Have you check? Please confirm?

Connectez-vous pour commenter.

Réponse acceptée

KALYAN ACHARJYA
KALYAN ACHARJYA le 10 Août 2018
Modifié(e) : KALYAN ACHARJYA le 11 Août 2018
%This can do without for loop also, recomemded to follow the without loop
[rows colm]=size(rgb_image);
for i=1:rows
for j=1:colm
if (mask(i,j)==0) %Mask should be binary Image, if not convert it.
rgb_image(i,j,1)=0;
rgb_image(i,j,2)=0;
rgb_image(i,j,3)=0;
end
end
end
figure,imshow(rgb_image);
  9 commentaires
Image Analyst
Image Analyst le 11 Août 2018
Hmmmm. Not sure why. Here's a fully working example.
originalImage = imread('peppers.png');
subplot(2, 2, 1);
imshow(originalImage);
axis('on', 'image');
[rows, columns, numberOfColorChannels] = size(originalImage);
% Make mask
mask = false(rows, columns);
mask(100:300, 100:400) = true;
subplot(2, 2, 2);
imshow(mask);
axis('on', 'image');
maskedRgbImage = originalImage; % Initialize
% Mask the image using bsxfun() function to multiply the mask by each channel individually.
% Will work regardless if it's grayscale or color.
maskedRgbImage = bsxfun(@times, maskedRgbImage, cast(mask, 'like', maskedRgbImage));
subplot(2, 2, 3);
imshow(maskedRgbImage);
axis('on', 'image');
Sivaramakrishnan Rajaraman
Sivaramakrishnan Rajaraman le 13 Août 2018
It works pretty well for me. Many thanks.

Connectez-vous pour commenter.

Plus de réponses (1)

Image Analyst
Image Analyst le 10 Août 2018
Modifié(e) : Image Analyst le 10 Août 2018
This should work
maskedRgbImage = originalImage; % Initialize
% Convert to RGB, if needed.
[rows, columns, numberOfColorChannels] = size(maskedRgbImage);
if numberOfColorChannels == 1
maskedImage = cat(3, maskedRgbImage, maskedRgbImage, maskedRgbImage);
end
% Mask the image using bsxfun() function to multiply the mask by each channel individually.
% Will work regardless if it's grayscale or color.
maskedRgbImage = bsxfun(@times, maskedRgbImage, cast(mask, 'like', maskedRgbImage));

Catégories

En savoir plus sur Image Processing Toolbox 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!

Translated by