2016-10-19 6 views
3

enter image description hereкак разделить изображение и заполнить различные цвета

В этой картине, как использовать код MatLab, чтобы разделить его на несколько частей, а затем цвет заливки в него? Кроме того, как установить цвет градиента во втором коде ???

Вот код сегментации картина:

clc 
rgb=imread('sample1.bmp'); 
bw=im2bw(rgb2gray(rgb),.8); 
bw=medfilt2(bw); 
planes=bwareaopen(bw,800); 
D=mat2gray(bwdist(imcomplement(planes))); 
stats=regionprops(D>.8,'Centroid'); 
planes_centroid=cat(1,stats.Centroid); 
planes_mask=false(size(bw));  
planes_mask(sub2ind(size(bw),round(planes_centroid(:,2)),... 
     round(planes_centroid(:,1))))=1; 
M=imimposemin(imcomplement(D),planes_mask); 
L=watershed(M); 
r=L & planes; 
stats=regionprops(r,'BoundingBox','Centroid') 
bb=cat(1,stats.BoundingBox); 
c=cat(1,stats.Centroid); 
figure,imshow(planes) 
hold on 
for i=1:length(stats) 
    rectangle('Position',bb(i,:),'EdgeColor','b') 
    plot(c(i,1),c(i,2),'r*') 
    text(c(i,1)-5,c(i,2)-10,num2str(i)) 
end 
%second code 
clc;clf;close all;clear all; 
color=cell(4,1); 
for i=1:4 
input=imread(['heartspline2_4_',num2str(i)],'bmp'); 
figure,imshow(input); 
BW=im2bw(input,graythresh(input)); 
[B,L]=bwboundaries(BW,'noholes'); 
for k=1:length(B) 
    boundary=B{k}; 
    ind=size(boundary(:,2)); 
    plot(boundary(:,2),boundary(:,1),'k','LineWidth',2); 
    hold on; 
    axis off; 
    if (k==1) 
     patch(boundary(:,2),boundary(:,1),'w'); 
    else 
     patch(boundary(:,2),boundary(:,1),???); 
    end 
end 
saveas(gca,['y_','heartspline2_4_',num2str(i)],'bmp') 
close(gcf) 
end 
+0

Вы можете конвертировать изображение в svg (множество бесплатных онлайн-инструментов), тогда легко изменить цвета путей, посмотрите на этот пример: http://stackoverflow.com/questions/20211890/svg-change-fill-color-on-button-click –

+0

Добро пожаловать в StackOverflow! Вы должны исследовать и попробовать самостоятельно. Тогда, если у вас возникла проблема с кодом, и спросите о своей конкретной проблеме, поделитесь [минимальным, полным и проверяемым примером] (http://stackoverflow.com/help/mcve). – erfan

+0

Мне нужно обработать его в Matlab. – pring

ответ

7

Вы можете использовать bwlabel назначить другой индекс для каждой области изображения:

img = imread('http://i.stack.imgur.com/F1Iya.jpg'); %// read image 
bw = img(:,:,1) > 128; %// convert to binary mask 
lb = bwlabel(bw,4); %// extract distinct regions 

Результат:

figure; imshow(lb, [], 'border', 'tight'); colormap(rand(256,3)); 

enter image description here


Если вы хотите эффект градиента к цветам, вы можете

[x y] = meshgrid(linspace(0,1,size(bw,2)), linspace(0,1,size(bw,1))); 
rand('seed',543310); 
rgb_lb = ind2rgb(lb, rand(max(lb(:)+1),3)); %// convert to RGB color image 
gx = x; 
gx(lb==1)=1; %// use the horizontal gradient 
gx = gx./max(gx(:)); 

Примените градиент:

rgb_lb = bsxfun(@times, rgb_lb, gx); 

Результат:

enter image description here

+2

Упрощенный только потому, что это выглядит великолепно! –

+1

@AnderBiguri tnx! Я случайно выбрал цвета сам;) – Shai

+1

Довольно аккуратно, отмечая детали ('4' в' bwlabel (bw, 4) '). – erfan

 Смежные вопросы

  • Нет связанных вопросов^_^