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,[]);