2016-07-17 23 views
-1

Wir müssen den Boden mit einer einfachen Füllung von unten in der Abbildung unten erkennen. Irgendwelche Vorschläge?
Original imageSo füllen Sie ein Bild mit der Seite

Diese Codes, was ich bisher getan haben,

rgb=imread('obstacle_scene_1.jpg'); 
figure, imshow(rgb); 
rgbImage = imread('obstacle_scene_1.jpg'); 
hsvInt = rgb2hsv(rgbImage); 
hsvDouble = rgb2hsv(double(rgbImage)); 
figure, imshow(hsvInt); 
figure, imshow(hsvDouble); 
level = graythresh(hsvInt); 
bw = im2bw(hsvInt,level); 
bw = bwareaopen(bw, 50); 
figure, imshow(bw) 

, was ich will, ist
enter image description here

+0

warum nicht nutzen Sie Matlab für das - du wirst in einem jiff – gpasch

+0

erfolgen Scheint das nicht wie Matlab Codes für dich? –

+0

Wenn es sich bei dieser Frage um Matlab handelt, markieren Sie sie bitte als solche. Der Code könnte so ziemlich jede Sprache sein. – Eiko

Antwort

2

GraphCut Unter Verwendung der oberen Begrenzungs und die Hindernisse auf "Hintergrund" und der untere zu "Vordergrund":

img = imread('http://i.stack.imgur.com/xJQBP.jpg'); 
bw = img(4:243,6:325,1) > 128 ; 
sz = size(bw); 

erstellen pixelweise Tendenz nicht am Boden

bgp = linspace(1,0,sz(1))'*ones(1,sz(2)); 

Constrain die letzte Zeile in dem Hintergrund, stärkere Tendenz zu gehören nicht

bgp(end,:) = 1000.*(1-bw(end,:)); 

Constraint obere Reihe und Hindernisse in dem Hintergrund gehören nicht gehören "Vordergrund":

fgp = 1000.*bw; 
fgp(1,:) = 1000; 

das Diagramm erstellen (mit sparse_adj_matrix):

[ii jj] = sparse_adj_matrix(sz, 1, 1); 
sel = ii<jj; 
ii=ii(sel); 
jj=jj(sel); 
W = sparse(ii, jj, double(bw(ii)==bw(jj)), numel(bw), numel(bw)); 

GraphCut Mit dem Bild zu spalten:

gch = GraphCut('open',[bgp(:) fgp(:)]', 500*[0 1; 1 0], W+W'); 
[gch L] = GraphCut('expand', gch); 
gch = GraphCut('close', gch); 

Resultierende mit:

L = reshape(L, sz); 

enter image description here