How can I remove unwanted area by mask?

21 visualizaciones (últimos 30 días)
Jenifer NG
Jenifer NG el 4 de Jul. de 2022
Comentada: DGM el 5 de Jul. de 2022
Dear All,
Could anyone help to remove unwanted area by using a mask? as figure bellow
  • I create a mask by thresholding
  • Then want to remove unwanted area by the mask
% here is my code
I = imread('coins.png');
X = imadjust(I);
% Threshold image - manual threshold
BW = im2gray(X) > 5.355000e+01;
% Dilate mask with default
radius = 1;
decomposition = 4;
se = strel('disk', radius, decomposition);
BW = imdilate(BW, se);
% Create masked image.
maskedImage = X;
maskedImage(~BW) = 0;
imwrite(maskedImage,'mask.png')
  3 comentarios
Jenifer NG
Jenifer NG el 4 de Jul. de 2022
thanks you my simple mistake :((
Jenifer NG
Jenifer NG el 4 de Jul. de 2022
How can I put process for multiple image ?

Iniciar sesión para comentar.

Respuesta aceptada

DGM
DGM el 4 de Jul. de 2022
Editada: DGM el 5 de Jul. de 2022
Just get the file names somehow and read/process/write the files in a loop.
This is one example based on simple pattern matching.
% you'll have to set these directories
inFolder = 'sources'; % this is just where i had some test files
outFolder = './'; % the folder to place the outputs in
outfiletype = '.png'; % this makes it easy to change
filePattern = fullfile(inFolder, '*.jpg'); % select which files to load
allFiles = dir(filePattern);
for k = 1:length(allFiles)
baseFileName = allFiles(k).name;
fullFileName = fullfile(inFolder, baseFileName);
% process image...
I = imread(fullFileName);
I = im2gray(I); % image needs to be gray if using imadjust() like that
I = imadjust(I);
% Threshold image - manual threshold
% you'll have to come up with a way to do the thresholding
% that's effective for all images. that's not something i can guess
BW = I > 5.355000e+01;
% Dilate mask with default
radius = 1;
decomposition = 4;
se = strel('disk', radius, decomposition);
BW = imdilate(BW, se);
% Create masked image.
maskedImage = I;
maskedImage(~BW) = 0;
% write images
% this assumes all input images are .jpg or .png; add cases as needed
fnamenoext = regexprep(baseFileName,'(.jpg$)|(.png$)','');
% build filename out of old filename, k, and specified path/extension
FileName = fullfile(outFolder,sprintf('%s_masked%s',fnamenoext,outfiletype))
imwrite(maskedImage,FileName); %B is the output images
end
See also:
  5 comentarios
Image Analyst
Image Analyst el 5 de Jul. de 2022
BW = bwareafilt(BW, 1); % Keep largest blob only.
DGM
DGM el 5 de Jul. de 2022
Oh sorry. I meant to delete that. You should be able to use the im2gray() line that's commented out.
I used mono() since I'm using an older version that doesn't have im2gray().

Iniciar sesión para comentar.

Más respuestas (1)

Image Analyst
Image Analyst el 4 de Jul. de 2022
"How can I put process for multiple image ? " << See the FAQ:

Productos


Versión

R2022a

Community Treasure Hunt

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

Start Hunting!

Translated by