Verfasst am: 02.04.2013, 10:46
Titel: Image Acquisition T.: Farbe & Lage von Objekten erkennen
Hallo Liebe Matlab-User,
ich habe ein Problem:
Ich möchte gerne Duplo-Steine mit Matlab erkennen.
Und zwar habe ich braue und gelbe Steine. (Siehe Foto)
Ich habe diese Steine auch schon mit Matlab erkennen können,
meinen Quellcode füge ich bei.
Doch leider bekomme ich nicht hin, dass er mir anzeigt, welche Farbe jetzt der Stein hat (blau oder gelb). Und dann würde ich noch gerne die Pixelzahl in x und y haben, damit ich weiß wo genau der Stein ist.
Ich hoffe ihr könnt mir helfen.
Lg,
Becks_jn
Code:
%%
RGB = imread('Foto.jpg');
imshow(RGB);
%%
I = rgb2gray(RGB);
threshold = graythresh(I-100);
bw = im2bw(I,threshold);
imshow(bw)
%%
% remove all object containing fewer than 30 pixels
bw = bwareaopen(bw,30000);
% % fill a gap in the pen's cap
se = strel('disk',2);
bw = imclose(bw,se);
% % fill any holes, so that regionprops can be used to estimate % the area enclosed by each of the boundaries
bw = imfill(bw,'holes');
% imshow(bw)
%%
[B,L] = bwboundaries(bw,'noholes');
% Display the label matrix and draw each boundary imshow(label2rgb(L, @jet, [.5 .5 .5])) hold on
for k = 1:length(B)
boundary = B{k};
plot(boundary(:,2), boundary(:,1), 'w', 'LineWidth', 2) end
%%
stats = regionprops(L,'Area','Centroid');
threshold = 0.94;
% loop over the boundaries for k = 1:length(B) % obtain (X,Y) boundary coordinates corresponding to label 'k'
boundary = B{k};
% compute a simple estimate of the object's perimeter
delta_sq = diff(boundary).^2;
perimeter = sum(sqrt(sum(delta_sq,2)));
% obtain the area calculation corresponding to label 'k' area = stats(k).Area;
% compute the roundness metric
metric = 4*pi*area/perimeter^2;
% display the results
metric_string = sprintf('%2.2f',metric);
% mark objects above the threshold with a black circle if metric > threshold
centroid = stats(k).Centroid;
plot(centroid(1),centroid(2),'ko');
end text(boundary(1,2)-35,boundary(1,1)+13,metric_string,'Color','y',...
'FontSize',14,'FontWeight','bold');
end title(['Metrics closer to 1 indicate that ',...
'the object is approximately round']);
Du kannst Beiträge in dieses Forum schreiben. Du kannst auf Beiträge in diesem Forum antworten. Du kannst deine Beiträge in diesem Forum nicht bearbeiten. Du kannst deine Beiträge in diesem Forum nicht löschen. Du kannst an Umfragen in diesem Forum nicht mitmachen. Du kannst Dateien in diesem Forum posten Du kannst Dateien in diesem Forum herunterladen
MATLAB, Simulink, Stateflow, Handle Graphics, Real-Time Workshop, SimBiology, SimHydraulics, SimEvents, and xPC TargetBox are registered trademarks and The MathWorks, the L-shaped membrane logo, and Embedded MATLAB are trademarks of The MathWorks, Inc.