MATLAB Answers

Create mask over image

조회 수: 75(최근 30일)
I am trying to create mask over an image (input). I already used photoshop to create a mask (which is basiclly an image with same size as input image) t which I add to the original image. Then I use NMF to reconstruct the original image. but it doesnt seem to be working. Am I doing the masking correctly? Any other ideas?
Input=im2double(imread('dataset/3.jpg')); % RGB original image
mask = double( mat2gray( im2double(imread('dataset/mask1.png')) ) == 1 ); % loading a grayscale image icreated in photoshop
if size(mask,3)==1 && size(input,3)>1
mask = repmat(mask,[1,1,size(input,3)]);
end
CorruptedImage = mask.*Input
Q=mask(:,:,1);
Red=CorruptedImage(:,:,1);
Gre=CorruptedImage(:,:,2);
Blu=CorruptedImage(:,:,3);

  댓글 수: 0

로그인 to comment.

채택된 답변

Subhadeep Koley
Subhadeep Koley 15 Feb 2020
편집: Subhadeep Koley 15 Feb 2020
You should not use the variable name input as it shadows a MATLAB built-in function. Use the example code below.
close all; clc;
img = im2double(imread('peppers.png'));
figure; imshow(img);
title('Original RGB image');
mask = im2double(imread('peppersMask.png')); % Download the mask attached below
figure; imshow(mask);
title('Mask');
if size(mask, 3) == 1 && size(img, 3) > 1
mask = repmat(mask, [1, 1, size(img, 3)]);
end
CorruptedImage = mask .* img;
Q = mask(:, :, 1);
Red = CorruptedImage(:, :, 1);
Gre = CorruptedImage(:, :, 2);
Blu = CorruptedImage(:, :, 3);
figure; imshow(CorruptedImage);
title('CorruptedImage');
figure; montage(CorruptedImage, 'Size', [1, 3]);
title('R, G, B component of the CorruptedImage');

  댓글 수: 3

fadams18
fadams18 15 Feb 2020
  1. How did u create that pepperMask image. I can't use it with my images because they are not of the same size.
  2. second point is the mask becomes a 384x512x3 logical. Will it work even if its not the same type as the img?
  3. If u already pre-created the mask do u need this line below?
((im2double(imread('peppersMask.png'))) == 1) % what is the "==1" doing
Subhadeep Koley
Subhadeep Koley 15 Feb 2020
@ fadams18
1. You can not use the pepperMask image for your image. I created that mask only for giving an example. Also you said that " I already used photoshop to create a mask...". Therefore you can use the mask, which you have created.
2. Yes, it is working as of version R2019b.
3. Actually "==1" is not required. I have upated my answer.
fadams18
fadams18 15 Feb 2020
Thank you!

로그인 to comment.

추가 답변(1개)

Image Analyst
Image Analyst 15 Feb 2020
To mask an image with a binary image, which will blacken the image outside where the mask is true:
% Method to multiplication channel by channel.
% Mask the image using bsxfun() function to multiply the mask by each color channel or slice individually.
maskedRgbImage = bsxfun(@times, rgbImage, cast(mask, 'like', rgbImage));

  댓글 수: 8

표시 이전 댓글 수: 5
Image Analyst
Image Analyst 15 Feb 2020
And how are we supposed to know what the mask should be? How about a threshold on the green channel (no idea - just grasping at straws here)
mask = rgbImage(:, :, 2) > 128; % or whatever...
I assumed you somehow already had the mask from the NMF processing you did, because I certainly don't know what it is.
fadams18
fadams18 16 Feb 2020
And how are we supposed to know what the mask should be? Thats what i said in the reply. The mask is an image of just text and when added to the image it gives the above image. I just want to know a good way to create this text mask.
Image Analyst
Image Analyst 16 Feb 2020
You said that the authors already had the mask and that they added it to the original image on the left. So why don't you just type up something in a word processor program then type alt-PrintScreen (in Windows) or use the snipping tool to capture a screenshot into a file?
Or Google "text image" and download one:

로그인 to comment.

이 질문에 답변하려면 로그인을(를) 수행하십시오.


Translated by