function [skin_img, backg_img, clothes_img, outlier_img] = color_segment(img_file_name) % segment an image into skin, background, and outlier % Alex Gruenstein, cs223b, Assignment #3 load 'training_data.mat' meanSkin covSkin meanBackg covBackg meanClothes covClothes; %load means and covarss from file im1 = imread(img_file_name); im = double(im1); [rows, cols, depth] = size(im1) hsv2Data = image_to_hsv2data(im); P1 = gaussdensity(hsv2Data, meanSkin, covSkin)'; P2 = gaussdensity(hsv2Data, meanBackg, covBackg)'; P4 = gaussdensity(hsv2Data, meanClothes, covClothes)'; P3 = ones(1, rows*cols)/30; %normalize S = P1 + P2 + P3 + P4; P1 = P1 ./ S; P2 = P2 ./ S; P3 = P3 ./ S; P4 = P4 ./ S; %find max [C, I] = max([P1; P2; P3; P4]); Ret = zeros(4,rows*cols); for i = 1:rows*cols Ret(I(i),i) = 1; end skin_img = reshape(Ret(1,:), rows, cols); backg_img = reshape(Ret(2,:), rows, cols); outlier_img = reshape(Ret(3,:), rows, cols); clothes_img = reshape(Ret(4,:), rows, cols); figure(1); imagesc(im1); axis image; figure(2); imagesc(skin_img); axis image; colormap(gray); figure(3); imagesc(backg_img); axis image; colormap(gray); figure(4); imagesc(clothes_img); axis image; colormap(gray); figure(5); imagesc(outlier_img); axis image; colormap(gray);