How can I remove unwanted area by mask?
7 views (last 30 days)
Show older comments
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
![](https://www.mathworks.com/matlabcentral/answers/uploaded_files/1054565/image.png)
% 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 Comments
Accepted Answer
DGM
on 4 Jul 2022
Edited: DGM
on 5 Jul 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 Comments
DGM
on 5 Jul 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().
More Answers (1)
Image Analyst
on 4 Jul 2022
"How can I put process for multiple image ? " << See the FAQ:
0 Comments
See Also
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!