- the circle perimeter alone,
- the part inside the circle, or
- the part outside the circle.
You are now following this question
- You will see updates in your followed content feed.
- You may receive emails, depending on your communication preferences.
How to remove few part of a circle?
2 views (last 30 days)
Show older comments
I am drawing different radius circles over an image object using simple plot function. How can remove circle portion from background and will only left the portion that is going through image object.
Answers (1)
Image Analyst
on 2 Mar 2019
You can make a mask and then use it to erase the part of the image you don't want
binaryImage(mask) = false; % Erase in mask
However your wording is so ambiguous, I don't know what the mask should be :
Please explain better or attach a desired output image.
17 Comments
Zara Khan
on 3 Mar 2019
Edited: Zara Khan
on 3 Mar 2019
Image Analyst: Circle perimeter will be visible when it will get image object only. It will not visible when going through background . I have attached a picture to explain how the ouput will be.
Image Analyst
on 3 Mar 2019
Assuming when you generate each circle, you have the (x,y) coordinates of it, simply erase them:
for k = 1 : length(x)
col = round(x);
row = round(y);
binaryImage(row, col) = false;
end
Zara Khan
on 3 Mar 2019
clc;
close all;
clear;
workspace;
a = imread('img.png');
bwimg =bwareafilt(~a, 1);
s=regionprops(bwimg,'Orientation','Centroid','MajorAxisLength','MinorAxisLength');
circleCenterX =s.Centroid(1);
circleCenterY =s.Centroid(2);
diameter = mean([s.MajorAxisLength s.MinorAxisLength],2);
figure;
imshow(bwimg);
set (gca,'TickLabelInterpreter','none');
set(gca,'fontweight','bold','fontsize',12);
set(gca,'color','black');
get(0,'Factory');
hold on
for n=1:8
r=n*diameter/16;
t=0:0.001:2*pi;
x = circleCenterX + r* sin(t);
y = circleCenterY + r * cos(t);
plot(x,y, 'LineWidth', 2);
for k=1:length(x);
col=round(x);
row=round(y);
bwimg(row,col)=false;
end
end
This is not working .
Image Analyst
on 3 Mar 2019
Attach 'img.png'
Image Analyst
on 14 Mar 2019
Yes, try this:
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 = 20;
rgbImage = imread('img.png');
% Get 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)
if numberOfColorChannels > 1
% It's not really gray scale like we expected - it's color.
% Use weighted sum of ALL channels to create a gray scale image.
% grayImage = rgb2gray(rgbImage);
% ALTERNATE METHOD: Convert it to gray scale by taking only the green channel,
% which in a typical snapshot will be the least noisy channel.
grayImage = rgbImage(:, :, 2); % Take green channel.
else
grayImage = rgbImage; % It's already gray scale.
end
% Now it's definitely gray scale with range of 0 to 255.
% Display the image.
subplot(2, 2, 1);
imshow(grayImage, []);
title('Original Image', 'FontSize', fontSize, 'Interpreter', 'None');
axis('on', 'image');
hp = impixelinfo();
%------------------------------------------------------------------------------
% Set up figure properties:
% Enlarge figure to full screen.
set(gcf, 'Units', 'Normalized', 'OuterPosition', [0, 0.04, 1, 0.96]);
% Get rid of tool bar and pulldown menus that are along top of figure.
% set(gcf, 'Toolbar', 'none', 'Menu', 'none');
% Give a name to the title bar.
set(gcf, 'Name', 'Demo by ImageAnalyst', 'NumberTitle', 'Off')
drawnow;
binaryImage = bwareafilt(~grayImage, 1);
props = regionprops(binaryImage,'Orientation','Centroid','MajorAxisLength','MinorAxisLength');
circleCenterX = props.Centroid(1);
circleCenterY = props.Centroid(2);
% Get the average of the min and max diameter.
diameter = mean([props.MajorAxisLength, props.MinorAxisLength], 2)
% Display the image.
subplot(2, 2, 2);
imshow(binaryImage);
title('Binary Image', 'FontSize', fontSize, 'Interpreter', 'None');
axis('on', 'image');
hp = impixelinfo();
hold on
drawnow;
circumference = 2 * pi * props.MajorAxisLength;
t = linspace(0, 2*pi, 1.5 * circumference);
fprintf('Writing black to the %d points along the circles.', length(t));
for n = 1 : 8
fprintf('Processing circle #%d.\n', n);
r = n * diameter / 16;
x = circleCenterX + r * sin(t);
y = circleCenterY + r * cos(t);
plot(x,y, 'LineWidth', 2);
% Make the binary image black where it is at the circle.
for k=1:length(x)
col=round(x(k));
row=round(y(k));
binaryImage(row,col) = false;
end
end
% Display the final image.
subplot(2, 2, 3);
imshow(binaryImage);
title('Final Image', 'FontSize', fontSize, 'Interpreter', 'None');
axis('on', 'image');
madhan ravi
on 14 Mar 2019
+1, really admirable ?
Zara Khan
on 15 Mar 2019
Image Analyst:
Thank you for your effort sir. But I have tried to show how will be my desired output by adding the "i.png" where all circle permiters are in black colors. But actually it will be in colors.Only the portion where its getting background will be ommited just like your final image. But here all are perimeters are in black. Is this possible to make them colors?
Image Analyst
on 15 Mar 2019
Sure, just change it to an RGB image.
rgbImage(row,col, 1) = redColor;
rgbImage(row,col, 2) = greenColor;
rgbImage(row,col, 3) = blueColor;
Of course you will need to change those values every circle if you want different colors. They should be in the range 0-255.
Image Analyst
on 24 Oct 2019
Not sure what you mean. The code above will work for any color, just put in the right values.
Zara Khan
on 29 Oct 2019
% Make the binary image black where it is at the circle.
for k=1:length(x)
col=round(x(k));
row=round(y(k));
binaryImage(row,col) = false;
end
end
I want to change this portion .
% Make the binary image black where it is at the circle.
I want to make the binary image to any colour where it is at the circle. I am using colour code but its not working .
After making this I want to chane the image black background to white keeping the image circle portion intact .
Image Analyst
on 29 Oct 2019
Binary images are only black or white. You can use an RGB image though:
rgbImage(row,col, 1) = redValue;
rgbImage(row,col, 2) = greenValue;
rgbImage(row,col, 3) = blueValue;
Image Analyst
on 31 Oct 2019
Again, you'd have to use an RGB image.
See Also
Categories
Find more on Image Processing Toolbox in Help Center and File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!An Error Occurred
Unable to complete the action because of changes made to the page. Reload the page to see its updated state.
Select a Web Site
Choose a web site to get translated content where available and see local events and offers. Based on your location, we recommend that you select: .
You can also select a web site from the following list
How to Get Best Site Performance
Select the China site (in Chinese or English) for best site performance. Other MathWorks country sites are not optimized for visits from your location.
Americas
- América Latina (Español)
- Canada (English)
- United States (English)
Europe
- Belgium (English)
- Denmark (English)
- Deutschland (Deutsch)
- España (Español)
- Finland (English)
- France (Français)
- Ireland (English)
- Italia (Italiano)
- Luxembourg (English)
- Netherlands (English)
- Norway (English)
- Österreich (Deutsch)
- Portugal (English)
- Sweden (English)
- Switzerland
- United Kingdom(English)
Asia Pacific
- Australia (English)
- India (English)
- New Zealand (English)
- 中国
- 日本Japanese (日本語)
- 한국Korean (한국어)