Can anyone help with this error? (I just want to see the contour of the bluish area at the bottom of the image)

1 view (last 30 days)
close all
clear all
clc
I = imread('frame75.jpg');
imshow(I)
imcontour(I,3)
Error:
Error in imcontour>ParseInputs (line 110)
validateattributes(a,{'uint8','int16','uint16','double','logical','single'}, ...
Error in imcontour (line 40)
[x,y,a,extra_args] = ParseInputs(varargin{:});
Error in contour (line 8)
imcontour(I,3)

Accepted Answer

darova
darova on 1 Jul 2020
Detect blue region properly
I0 = imread('frame75.jpg');
I1 = double(I0);
% colors from blue region
R = [80 50 0];
G = [160 110 70];
B = [180 120 70];
B1 = logical(I1(:,:,1)*0);
% detect regions and merge
for i = 1:length(R)
B0 = abs(I1(:,:,1)-R(i)) < 20 & ...
abs(I1(:,:,2)-G(i)) < 50 & ...
abs(I1(:,:,3)-B(i)) < 50;
B1 = B1 | B0;
end
% B1 = uint8( cat(3,B1,B1,B1) );
imshowpair(I0,B1)
% imshow(B1.*I0)
  12 Comments
muhammad choudhry
muhammad choudhry on 3 Jul 2020
You the man! seriously..... It worked
I got the answer
ans = 431
just wondering when I counted manually answer was 486 and with binarizing 431... differrence in pixels are like 55. Do you know why there is that difference?
sum(~A1(:)) => means it is adding all the pixels in the image except white background

Sign in to comment.

More Answers (1)

Ameer Hamza
Ameer Hamza on 27 Jun 2020
You need to specify a single channel image to imcontour(). For example, just provide the blue channel
imcontour(I(:,:,3), 3)
or convert image to grayscale
imcontour(rgb2gray(I), 3)
  1 Comment
muhammad choudhry
muhammad choudhry on 29 Jun 2020
Edited: darova on 1 Jul 2020
Hi,
Hamza please see the attached. I have changed to grey scale function to capture the contour of the injected dye flow but I am also getting the contours of other background is there a way to only capture the dye contour.
here is a code I used!
close all
clear all
clc
%Read the Image
I = imread('frame75.jpg');
I1 = imread('frame80.jpg');
warning('off', 'Images:initSize:adjustingMag');
%Convert to greyscale (contour command works on greyscale images)
img=rgb2gray(I);
img1=rgb2gray(I1);
%Subtraction of the frames
figure()
dif=img-img1;
warning('off', 'Images:initSize:adjustingMag');
imshow(dif)
hold on
% contour of the image
figure()
imcontour(dif,1);

Sign in to comment.

Community Treasure Hunt

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

Start Hunting!