WICHTIG: Der Betrieb von goMatlab.de wird privat finanziert fortgesetzt. - Mehr Infos...

Mein MATLAB Forum - goMatlab.de

Mein MATLAB Forum

 
Gast > Registrieren       Autologin?   

Partner:




Forum
      Option
[Erweitert]
  • Diese Seite per Mail weiterempfehlen
     


Gehe zu:  
Neues Thema eröffnen Neue Antwort erstellen

Image Aquisition: Bildausschnitt wird zu Graustufenbild

 

deKay
Forum-Newbie

Forum-Newbie


Beiträge: 2
Anmeldedatum: 26.11.13
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 26.11.2013, 14:46     Titel: Image Aquisition: Bildausschnitt wird zu Graustufenbild
  Antworten mit Zitat      
Hallo

ich habe ein kleines Problem mit meinem Matlab Script. Es soll Münzen unterscheiden können. Ds geht auch soweit nur bei gleich großen habe ich ein Problem. Ich versuche anhand der Sättigung die Münzen zu unterscheiden.

Dazu will ich einen Ausschnitt aus dem Gesamtbild machen und davon das HSV-Bild erstellen. Nur wird der Ausschnitt aus einem Farbbild komischer weise in ein Graustufenbild ungewandelt. Was ich mir absolut nicht erklären kann.

Probiere schon eine weile daran herum das der Ausschnitt farbig wird aber ich finde den Fehler nicht.

Hat jemand von euch eine Idee?

Code:
close all;                      % Hardreset
clear all;
clc;
% v Unterhalb für "Offline-Modus" Auskommentieren
hwinfo = imaqhwinfo('winvideo');
device = hwinfo.DeviceInfo(1);
device.DefaultFormat;
device.SupportedFormats;
vid = videoinput('winvideo',1,'RGB24_1024x768');
src = getselectedsource(vid);

src.Gain = 1;                   %   Kontrast
src.Exposure = -3;              %   Helligkeit
Bild = getsnapshot(vid);        %   Standbild abspeichern
Bild = flipdim(Bild,1);         %   Bild drehen
% ^ Oberhalb für "Offline-Modus" Auskommentieren

Bild = imread('test3.PNG');     %   Offline Modus

%Otsu Methohde
I=Bild(:,:,1);                  
threshold = graythresh(I);      %   Schwelle für die BW Bildung
BW = im2bw(I,threshold);        %   BW Bild erstellen

BW = bwareaopen(BW,30);         %   Entfernt Rauschen
se = strel('disk',10);          %   Größe der füllenden Löcher
BW = imclose(BW,se);            %   Füllen der Löcher

STATS = regionprops (BW, 'all');
B = bwboundaries(BW,'noholes'); %   Erkennt Objekte

%subplot(2,1,1)
imshow(Bild)                    %   Bild anzeigen (BW oder Bild)
hold on

for k = 1:length(B)
   
    mitte = STATS(k).Centroid;  %   Mittelpunkt finden
    X = mitte(1)-30;            %   Position für Text
    Y = mitte(2);               %   Position für Text
    boundary = B{k};            %   Umrandet die objekte
    plot(boundary(:,2),boundary(:,1),'r','Linewidth',2)     %   Zeichnet die Umrandung
   
    major = STATS(k).MajorAxisLength    %   Maximaler Durchmesser
    minor = STATS(k).MinorAxisLength    %   Minimaler Durchmesser
    area = STATS(k).Area;                %   Flächeninhalt
    area_calc = pi*(((major+minor)/4)^2);%   Berechnet den Flächeninhalt (ohne Löcher)
   
   xmin = mitte(1) - (major/2);
   xmax = mitte(1) + (major/2);
   ymin = mitte(2) - (major/2);
   ymax = mitte(2) + (major/2);

   Auswahl = Bild(ymin:ymax,xmin:xmax);


   HSV = rgb2hsv(Auswahl);
   S = sum(HSV);
   S = S(2)
   imshow(HSV)
   
    if (minor > major*0.95 || major < minor*1.05)           %   Wenn min. Durchmesser viel vom max. Durchmesser abweicht, handelt es sich trotz gegebenenfalls identischem Flächeninhalt NICHT um eine Münze
        if (area > area_calc*0.90 && area < area_calc*1.10) %   Wenn die berechnete Fläche, von der tatsächlichen Fläche abweicht, ist ein Loch in der "Münze"
        if(area>56000 && area<65000)
            text(X,Y,'2 Euro','color',[0,0,1],'fontsize',18,'FontWeight','bold')
        elseif(area>51000 && area<56000)
            if (S>65 && S<70)
                text(X,Y,'50 Cent','color',[0,0,1],'fontsize',18,'FontWeight','bold')
            elseif (S>70 && S<73)
                text(X,Y,'1 Franc','color',[0,0,1],'fontsize',18,'FontWeight','bold')
            else
                text(X,Y,'Fehler','color',[0,0,1],'fontsize',18,'FontWeight','bold')
            end
        elseif(area>49000 && area<51000)
            text(X,Y,'1 Euro','color',[0,0,1],'fontsize',18,'FontWeight','bold')
        elseif(area>41500 && area<49000)
            text(X,Y,'20 Cent','color',[0,0,1],'fontsize',18,'FontWeight','bold')
        elseif(area>37000 && area<41500)
            text(X,Y,'5 Cent','color',[0,0,1],'fontsize',18,'FontWeight','bold')
        elseif(area>32000 && area<37000)
            text(X,Y,'10 Cent','color',[0,0,1],'fontsize',18,'FontWeight','bold')
        elseif(area>25000 && area<32000)
            text(X,Y,'2 Cent','color',[0,0,1],'fontsize',18,'FontWeight','bold')
        elseif(area<25000 && area>15000)
            text(X,Y,'1 Cent','color',[0,0,1],'fontsize',18,'FontWeight','bold')
        else
        text(X-100,Y,'Keine bekannte Münze','color',[0,0,1],'fontsize',18,'FontWeight','bold')
        end
        else
        text(X-80,Y,'Keine Münze- Loch','color',[0,0,1],'fontsize',18,'FontWeight','bold')
        end
    else
        text(X-100,Y,'Keine Münze- unrund','color',[0,0,1],'fontsize',18,'FontWeight','bold')
    end
   
end
Private Nachricht senden Benutzer-Profile anzeigen


Hubertus
Forum-Meister

Forum-Meister


Beiträge: 1.034
Anmeldedatum: 08.01.09
Wohnort: Hamburg
Version: ---
     Beitrag Verfasst am: 26.11.2013, 15:05     Titel:
  Antworten mit Zitat      
Moin,

kann dein Code gerade nicht testen, aber ich denke, der Fehler liegt in:

Code:
Auswahl = Bild(ymin:ymax,xmin:xmax);
 

Der Ausschnitt ist ja nur 2-dimensional. Du müsstest ihn wie folgt ändern:
Code:
Auswahl = Bild(ymin:ymax,xmin:xmax,:);
 


Grüße - Hubertus
Private Nachricht senden Benutzer-Profile anzeigen
 
deKay
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 2
Anmeldedatum: 26.11.13
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 26.11.2013, 15:27     Titel:
  Antworten mit Zitat      
Hat funktioniert. Danke Smile
Private Nachricht senden Benutzer-Profile anzeigen
 
Neues Thema eröffnen Neue Antwort erstellen



Einstellungen und Berechtigungen
Beiträge der letzten Zeit anzeigen:

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
.





 Impressum  | Nutzungsbedingungen  | Datenschutz | FAQ | goMatlab RSS Button RSS

Hosted by:


Copyright © 2007 - 2024 goMatlab.de | Dies ist keine offizielle Website der Firma The Mathworks

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.