Bei der Bildverarbeitung ist es wichtig, Ihr Bild zu betrachten und zu versuchen, den Unterschied zwischen Ihrer Region von Interesse, d. H. Dem Zebra, und dem Rest, d.
In diesem Beispiel ist ein klarer Unterschied, dass der Hintergrund eher grünlich und der Zebra schwarz und weiß ist. Daher kann der grüne Kanal des Bildes verwendet werden, um den Hintergrund zu extrahieren. Danach kann das Ergebnis (nichtlinear) mit einigen Dilatations- und Erosionsschritten aufgeräumt werden.
Eine einfache und nicht-perfekte Segmentierungstechnik ist (in Matlab):
I = imread('lA196m.jpg');
% plot the original image
figure
subplot(2,2,1)
imshow(I)
% calculate the green channel (relative green value)
greenChannel = double(I(:,:, 2))./mean(I(:,:,:), 3);
binary = greenChannel > 1; % apply a thresshold
subplot(2,2,2)
imshow(binary);
% remove false positives (backgrounds)
se1 = strel('sphere',20);
binary2 = imdilate(imerode(binary,se1), se1);
subplot(2,2,3)
imshow(binary2);
% add false negatives
se2 = strel('sphere',10);
binary3 = imerode(imdilate(binary2,se2), se2);
subplot(2,2,4)
imshow(binary3);
% calculate & plot the boundary on the original image
subplot(2,2,1)
Bs = bwboundaries(~binary3);
B = Bs{1};
hold on
plot(B(:, 2), B(:, 1), 'LineWidth', 2);
Warum Sie fügen Sie nicht etwas, das Sie versucht haben? –
Nun, ich bin Anfänger in IP und ich habe einige der Standard-Algorithmen in OpenCV verwendet. Sie betrachten aber auch Streifen als Objekte. – user7837687
Wenn Sie ein Anfänger sind, sollten Sie andere Dinge tun. Eines Tages wirst du genug Wissen gesammelt haben, um zu verstehen, was notwendig ist. – Piglet