How to skip "roipoly" step?

2 次查看(过去 30 天)
Mariam Sheha
Mariam Sheha 2013-7-22
Hi Everybody... wish you are doing well..
I got nice color segmentation color from your site "File Exchange" that one done by webinar, it's working well but i had a problem that i want to skip the roipoly step , where i am already using a segmented image as attached. Sample image:http://imageshack.us/photo/my-images/189/8sba.jpg/
I would appreciate your help telling me how can i use it on a segmented image instead of using "roipoly"...
Thanks Alot...
The Code:
% load image
rgb = imread('segmented 3.jpg');
x(:,:,1)=imresize(rgb(:,:,1),[480 640]);
x(:,:,2)=imresize(rgb(:,:,2),[480 640]);
x(:,:,3)=imresize(rgb(:,:,3),[480 640]);
rgb=x;
% smooth image (reduce noise/color variation)
rgb = imfilter(rgb,ones(3,3)/9);
% view image and RGB layers (nonuniform illumination)
figure(1), set(1,'position',[99 79 826 589])
subplot(2,2,1), subimage(rgb), title('fabric image'), axis off
subplot(2,2,2), map=gray(256); map(:,2:3)=0; subimage(rgb(:,:,1),map), title('red layer'), axis off
subplot(2,2,3), map=gray(256); map(:,[1 3])=0; subimage(rgb(:,:,2),map), title('green layer'), axis off
subplot(2,2,4), map=gray(256); map(:,1:2)=0; subimage(rgb(:,:,3),map), title('blue layer'), axis off
% RGB histograms (poor separability)
figure(1), set(1,'position',[452 68 560 420])
figure(2), set(2,'position',[16 269 560 420])
%rgb2=rgb2gray(rgb);
c='rgb'; for i=1:3
n=hist(reshape(double(rgb(:,:,i)),[480*640 1]),0.5:256);
line(0:255,n,'color',c(i));
end
axis tight, xlim([0 255]), box on
xlabel intensity, ylabel population, title histograms
% convert image to L*a*b* color space (transform)
cform = makecform('srgb2lab');
lab = applycform(rgb,cform);
% view components (note illumination free)
figure(6)
subplot(2,2,1), subimage(rgb), title('fabric image'), axis off
subplot(2,2,2), subimage(lab(:,:,1)), title('L* layer'), axis off
subplot(2,2,3), map=gray(256); map(:,3)=0; map(:,2)=map(end:-1:1,2);
subimage(lab(:,:,2),map), title('a* layer'), axis off
subplot(2,2,4), map=gray(256); map(:,3)=map(end:-1:1,3); subimage(lab(:,:,3),map), title('b* layer'), axis off
% select polygon region of interest
figure, imshow(rgb), roipoly
% predefined regions for 6 different colors present
load my_regioncoordinates figure(3), imshow(rgb) for i=1:6
patch(roi(:,1,i),roi(:,2,i),'w','linestyle','none')
end
% predefined regions (everything else suppressed)
mask = false([480 640 6]);
for i=1:6
mask(:,:,i) = roipoly(rgb,roi(:,1,i),roi(:,2,i));
end
bw=repmat(logical(sum(mask,3)),[1 1 3]);
im=rgb; im(~bw)=nan;
figure(14), imshow(im)
% color markers (region average values of L*, a* and b*)
l=lab(:,:,1); a=lab(:,:,2); b=lab(:,:,3);
for i = 1:6
cMark(i,1) = mean2(l(mask(:,:,i)));
cMark(i,2) = mean2(a(mask(:,:,i)));
cMark(i,3) = mean2(b(mask(:,:,i)));
end
% classify every pixel using nearest neighbor rule
distance = zeros([480 640 6]);
for i=1:6
dx=double(a)-cMark(i,2); dy=double(b)-cMark(i,3);
distance(:,:,i) = sqrt(dx.^2 + dy.^2);
end
cLabels=0:5; [value,index]=min(distance,[],3);
label=cLabels(index);
% display segmented image
cMap=double(applycform(uint8(cMark),makecform('lab2srgb')))/255;
figure('position',[9 344 1005 334])
subplot(121), subimage(rgb), title('Original Image'), axis off,
subplot(122), subimage(label+1,cMap), title('Segmented Image'), axis off
  5 个评论

请先登录,再进行评论。

回答(0 个)

Community Treasure Hunt

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

Start Hunting!

Translated by