Dual boot Windows 7/8/10 and Ubuntu 16.04

Finding an object in Image and Counting of an object

Picture of 6.jpg 
clc;
clearvars;
close all;
imtool close all; % Close all imtool figures.
workspace;
format longg;
format compact;
fontSize = 20;
tic;
% Read image
original = imread('F04U2MPIXQG3WQS.LARGE.jpeg');
figure,imshow(original)
title('Original Image','FontSize',fontSize);

% RGB component
R=original(:,:,1);
G=original(:,:,2);
B=original(:,:,3);
figure,imshow(R)
title('Red Component Image','FontSize',fontSize);
figure,imshow(G)
title('Green Component Image','FontSize',fontSize);
figure,imshow(B)
title('Blue Component Image','FontSize',fontSize);

% Thresholding
% Select Red compoent
level=graythresh(R);
binary=im2bw(R,level);
figure,imshow(binary)
title('Thresholed Image','FontSize',fontSize);

% Use Morphological Operations
erosion=imerode(binary,strel('disk',2));
figure,imshow(erosion)
title('Eroded Image','FontSize',fontSize);

% Use Watershed segmentation
D = bwdist(erosion);
figure
imshow(D,[],'InitialMagnification','fit')
title('Distance transform of ~bw')
D = -D;
D(~erosion) = -Inf;
L = watershed(D);
Lrgb = label2rgb(L,'jet',[.5 .5 .5]);
figure
imshow(Lrgb,'InitialMagnification','fit')
title('Watershed transform of D')
figure,imshow(imfuse(erosion,Lrgb))
axis([])
bw2 = ~bwareaopen(~erosion, 10);
imshow(bw2)
D = -bwdist(~erosion);
figure,imshow(D,[])
Ld = watershed(~D);
figure,imshow(label2rgb(Ld))
bw2 = erosion;
bw2(Ld == 0) = 0;
mask = imextendedmin(D,2);
D2 = imimposemin(D,mask);
Ld2 = watershed(D2);
bw3 = erosion;
bw3(Ld2 == 0) = 0;
figure,imshow(erosion);
title('Watershed Segmentation','FontSize',fontSize)

% labelling
figure,imshow(original);
title('Labelling','FontSize',fontSize)
s=regionprops(logical(bw3),'Centroid','Area','Eccentricity','Perimeter');
hold on
for k=1:numel(s)
c=s(k).Centroid;
text(c(1),c(2),sprintf('%d',k),...
'HorizontalAlignment','center',...
'VerticalAlignment','middle');
end
hold off

Num = numel(s);
message= sprintf('You have counted %i Strawberries',Num);
h=msgbox(message);

Boundary an Object in Image using MATLAB


Step 1: Read the Image

Read the Image

An image is choosen so that it has considerable contrast with its background so that the objects can be identified. The function imread reads the image from a given location and stores it in the matrix img1. The imshow function displays the image.


img1=imread('Lines.jpg');
imshow(img1)

Step 2: Convert the Image to Grayscale

Convert the Image to Grayscale
This step removes any color information in the image to make it easier to identify objects. The rgb2gray converts the color image into a grayscale image and stores it into the matrix img2.

img1=rgb2gray(img1);
imshow(img1)

Step 3: Threshold the Image

Threshold the Image

This step thresholds the image by converting the grayscale image into an image that contains only two colors. The function im2bw() assigns black color to all the pixels that have luminosity than a threshold level and the others as white. the function graythresh() approximately calculates the threshold of the image.

img2=im2bw(img1,graythresh(img1));
imshow(img2)

Step 4: Complement the Image

Complement the Image
In this step we complement the image by using the ~ operator. By this we convert the white patches into black and vice versa. We perform this step as we wanted the areas of concern(objects) to be colored white.

img2=~img2;
imshow(img2)

Step 5: Find the Boundaries of the Objects

Find the Boundaries of the Objects
This step finds the boundaries of each object that it finds and stores it in B. The text function prints the number of objects that are found by bwboundaries.


B = bwboundaries(img2);
imshow(img2)
text(10,10,strcat('\color{green}Objects Found:',num2str(length(B))))
hold on

Step 6: Draw the Boundaries

Draw the Boundaries
MATLAB CODE:

This is a fun step in which we mark the boundaries of all the objects identified by bwboundaries function. This step can be eliminated if it seems complicated

for k = 1:length(B)
boundary = B{k};
plot(boundary(:,2), boundary(:,1), 'g', 'LineWidth', 0.2)
end



img1=imread('Lines.jpg');
imshow(img1)

img1=rgb2gray(img1);
imshow(img1)

img2=im2bw(img1,graythresh(img1));
imshow(img2)

img2=~img2;
imshow(img2)

B = bwboundaries(img2);
imshow(img2)
text(10,10,strcat('\color{green}Objects Found:',num2str(length(B))))
hold on

for k = 1:length(B)
boundary = B{k};
plot(boundary(:,2), boundary(:,1), 'g', 'LineWidth', 0.2)
end