Detecting color and shape from an image

15 views (last 30 days)
odai kiwan
odai kiwan on 27 Feb 2018
Edited: Immanuel Koshy on 13 Jul 2022
could any one tell me what's the wrong in this code, why it's not detecting the circle in the image accurately, also why the color is not detecting?
clc
clear all
close all
IM = imread('Circle.JPG');
IM = imresize(IM,[500,500]);
IM_BW = im2bw(IM);
IM_BW = bwareaopen(IM_BW,50);
[y,x] = find(IM_BW~=1); % Find indices and values of nonzero elements
c = mean([x y]); % Average or mean value of array
R = max(sqrt((c(1)-x).^2+(c(2)-y).^2 ));
th = linspace(0,2*pi); % Generate linearly spaced vector
xc = c(1)+R*cos(th);
xc = xc';
yc = c(2)+R*sin(th);
%%Plotting Circle
imshow(IM_BW);
hold on
plot(xc,yc,'r')
hold off
%%Detecting color
if IM(xc, yc, 1) > IM(xc, yc, 2) && IM(xc, yc, 1) > IM(xc, yc, 3)
disp('Red!')
elseif IM(xc, yc, 2) > IM(xc, yc, 3)
disp('Green!')
else
disp('Blue!')
end

Answers (1)

KSSV
KSSV on 27 Feb 2018
How about this approach?
IM = imread('Circle.JPG');
IM = imresize(IM,[500,500]);
IM_BW = im2bw(IM);
IM_BW = bwareaopen(IM_BW,50);
[y,x] = find(IM_BW~=1); % Find indices and values of nonzero elements
%%Get Bounding box
x0 = min(x) ; x1 = max(x) ;
y0 = min(y) ; y1 = max(y) ;
% length and breadth
L = abs(x1-x0) ;
B = abs(y1-y0) ;
% center bounding box
C = [x0+B/2 y0+L/2] ;
%%Get distances of the points from center of bounding box
data = repmat(C,[length(x),1])-[x,y] ;
dist = sqrt(data(:,1).^2+data(:,2).^2);
%%Classify the points into circles
nbins = 4 ; % number of circles you want
[N,edges,bin] = histcounts(dist,nbins) ;
% plot the classified circle points for check
figure(1)
imshow(IM)
hold on
for i = 1:nbins
plot((x(bin==i)),y(bin==i),'.','color',rand(1,3)) ;
end
%%Circle's radii and center
Circ = cell(nbins,1) ;
for i = 1:nbins
[xc1,yc1,R] = circfit(x(bin==i),y(bin==i)) ;
Circ{i} = [xc1 yc1 R] ;
end
figure(2)
imshow(IM)
hold on
th = linspace(0,2*pi) ;
for i = 1:nbins
xc = Circ{i}(1)+Circ{i}(3)*cos(th) ;
yc = Circ{i}(2)+Circ{i}(3)*sin(th) ;
plot(xc,yc,'color',rand(1,3),'linewidth',3) ;
end
  1 Comment
odai kiwan
odai kiwan on 27 Feb 2018
thanks man for helping but it didn't gave me what i want look at the pic

Sign in to comment.

Community Treasure Hunt

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

Start Hunting!