How do I remove the colored area on a part of the map?

조회 수: 6 (최근 30일)
Darya
Darya 2025년 4월 5일
댓글: Image Analyst 2025년 4월 6일
How can I remove the colored fill (make it white) outside the selected polygon?

답변 (1개)

Image Analyst
Image Analyst 2025년 4월 5일
The whole image, even the gray stuff and tick mark labels? Or just the colored parts?
Try this:
% Demo by Image Analyst
% Initialization steps:
clc; % Clear the command window.
close all; % Close all figures (except those of imtool.)
clear; % Erase all existing variables. Or clearvars if you want.
workspace; % Make sure the workspace panel is showing.
format long g;
format compact;
fontSize = 16;
%--------------------------------------------------------------------------------------------------------
% READ IN TEST IMAGE
folder = [];
baseFileName = 'heatmap.png';
fullFileName = fullfile(folder, baseFileName);
% Check if file exists.
if ~exist(fullFileName, 'file')
% The file doesn't exist -- didn't find it there in that folder.
% Check the entire search path (other folders) for the file by stripping off the folder.
fullFileNameOnSearchPath = baseFileName; % No path this time.
if ~exist(fullFileNameOnSearchPath, 'file')
% Still didn't find it. Alert user.
errorMessage = sprintf('Error: %s does not exist in the search path folders.', fullFileName);
uiwait(warndlg(errorMessage));
return;
end
end
rgbImage = imread(fullFileName);
%--------------------------------------------------------------------------------------------------------
% Display the image.
subplot(2, 2, 1);
imshow(rgbImage, []);
impixelinfo;
axis('on', 'image');
title('Original RGB Image', 'FontSize', fontSize, 'Interpreter', 'None');
% Update the dimensions of the image.
% numberOfColorChannels should be = 1 for a gray scale image, and 3 for an RGB color image.
[rows, columns, numberOfColorChannels] = size(rgbImage);
rows = 687
columns = 507
numberOfColorChannels = 3
% Maximize window.
g = gcf;
g.WindowState = 'maximized';
g.Name = 'Demo by Image Analyst';
g.NumberTitle = 'off';
drawnow;
%--------------------------------------------------------------------------------------------
% Threshold on black to get lines.
[r, g, b] = imsplit(rgbImage);
mask = (r == 0) & (g == 0) & (b == 0);
% Display the mask image.
subplot(2, 2, 2);
imshow(mask, []);
impixelinfo;
axis('on', 'image');
title('Mask Image', 'FontSize', fontSize, 'Interpreter', 'None');
%--------------------------------------------------------------------------------------------
% GET THE AREAS SO WE CAN SEE HOW BIG A LINE WE WANT TO KEEP.
% props = regionprops(mask, 'Area');
% allAreas = sort([props.Area])
% Only keep blobs bigger than 500 pixels.
mask = bwareaopen(mask, 500);
% Get the convex hull.
mask = bwconvhull(mask, "union");
% Display the standard deviation filtered image.
subplot(2, 2, 3);
imshow(mask, []);
impixelinfo;
axis('on', 'image');
title('Filled Mask Image', 'FontSize', fontSize, 'Interpreter', 'None');
%--------------------------------------------------------------------------------------------
% Mask the image to black outside the mask
% Mask image by multiplying each channel by the mask.
maskedRgbImage = rgbImage .* cast(mask, 'like', rgbImage); % R2016b or later. Works for gray scale as well as RGB Color images.
subplot(2, 2, 4);
imshow(maskedRgbImage, [])
impixelinfo;
axis('on', 'image');
caption = sprintf('Masked RGB Image');
title(caption, 'FontSize', fontSize, 'Interpreter', 'None');
drawnow;

카테고리

Help CenterFile Exchange에서 Explore and Edit Images with Image Viewer App에 대해 자세히 알아보기

Community Treasure Hunt

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

Start Hunting!

Translated by