We have done color image Segmentation using matlab tool. following steps are used to done color image segmentation.
1. Read image file
2. Apply Fuzzy C means clustering and group the data.
3.Find gradient magnitude for grouped data.
4.Finally apply watershed segmentation.
1. Read image file
2. Apply Fuzzy C means clustering and group the data.
3.Find gradient magnitude for grouped data.
4.Finally apply watershed segmentation.
clc
clear all
close all
warning off
[filename, pathname] = uigetfile( {'*.jpg', 'Jpg Image File (*.JPG)'}, ...
'Read a file');
file = [pathname filename];
IM = im2double(rgb2gray(imread(file)));
figure;imshow(IM,[]);
% load IM
[r c] = size(IM);
data = IM(:);
[center,U,obj_fcn] = fcm(data,4); % Fuzzy C-means classification with 4 classes
% Finding the pixels for each class
maxU = max(U);
index1 = find(U(1,:) == maxU);
index2 = find(U(2,:) == maxU);
index3 = find(U(3,:) == maxU);
index4 = find(U(4,:) == maxU);
% Assigning pixel to each class by giving them a specific value
fcmImage(1:length(data))=0;
fcmImage(index1)= 1;
fcmImage(index2)= 0.66;
fcmImage(index3)= 0.33;
fcmImage(index4)= 0.0;
% Reshapeing the array to a image
imagNew = reshape(fcmImage,r,c);
figure;imshow(imagNew,[]);
gradmag = imagNew;
g = gradmag - min(gradmag(:));
g = g / max(g(:));
th = graythresh(g); %# Otsu's method.
a = imhmax(g,th/2); %# Conservatively remove local maxima.
th = graythresh(a);
b = a > th/4; %# Conservative global threshold.
c = imclose(b,ones(8)); %# Try to close contours.
d = imfill(c,'holes'); %# Not a bad segmentation by itself.
%# Use the rough segmentation to define markers.
g2 = imimposemin(g, ~ imdilate( bwperim(a), ones(4) ));
L = watershed(g2);
Lrgb = label2rgb(L);
figure;imshow(Lrgb,[]);
No comments:
Post a Comment