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

Erkennen eines Bildbereiches mittels while-Schleife

 

ranzl
Forum-Newbie

Forum-Newbie


Beiträge: 2
Anmeldedatum: 08.01.16
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 24.04.2016, 06:36     Titel: Erkennen eines Bildbereiches mittels while-Schleife
  Antworten mit Zitat      
Hallo,
ich möchte bei einem s/w-Bild nur die außenliegenden weißen Pixel erfassen. Hierzu habe ich eine Schleife entworfen, die einen Großteil der gewünschten Pixel erfasst. Aber sie erfasst erstens nicht alle und zweitens auch unerwünschte. Außerdem ist die Methode sicher nicht die schnellste und eleganteste. Daher wollte ich Euch mal fragen, ob ihr irgendwelche Ideen und Anregungen zum verbessern des Codes habt.
Kor_Image ist das s/w_Bild und Kor_Reihe eine nx2-Matrix. Die erste Spalte von Kor_Reihe enthält die Startwerte eines Bildes. Also in jeder Reihe des Bildes wird die Spalte mit dem ersten weißen Pixel in Kor_Reihe geschrieben. Ab diesem Punkt geht der Code für jede Reihe das Bild ab und guckt, ob die Pixel den Wert 1 haben und gibt diesen dann den Wert 255. lim_1 ist einfach der Mittelwert aus Kor_Reihen(:,1)
Kor_Reihe(n,2) enthält wiederrum die Endwerte.

In meinem Programm habe ich den Code 4 mal etabliert. Er geht damit das Bild von links, recht, oben und untern durch. Ich hoffe ich habe es einigermaßen verständlich erklärt. Vielleicht machen es die Bilder etwas verständlicher.

Code:


        s=size(Kor_Image);
        for i=1:s(1)
            if Kor_Reihe(i,1)~=0 && Kor_Reihe(i,1)<lim_1
                e=Kor_Reihe(i,1);
                f=i;
                Kor_Reihe(i,1)=255;
                while Kor_Image(f,e+1)==1 || Kor_Image(f+1,e)==1 || Kor_Image(f,e-1)==1 || Kor_Image(f-1,e)==1
                    if Kor_Image(f,e+1)==1
                        Kor_Image(f,e+1)=255;
                    end
                    if Kor_Image(f+1,e)==1
                        Kor_Image(f+1,e)=255;
                    end
                    if Kor_Image(f,e-1)==1
                        Kor_Image(f,e-1)=255;
                    end
                    if Kor_Image(f-1,e)==1    
                        Kor_Image(f-1,e)=255;
                    end

                    while Kor_Image(f,e+1)==1 || Kor_Image(f+1,e)==1 || Kor_Image(f,e-1)==1 || Kor_Image(f-1,e)==1
                        f=f-1;                    
                        if Kor_Image(f,e+1)==1
                            Kor_Image(f,e+1)=255;
                        end
                        if Kor_Image(f+1,e)==1
                            Kor_Image(f+1,e)=255;
                        end
                        if Kor_Image(f,e-1)==1
                            Kor_Image(f,e-1)=255;
                        end
                        if Kor_Image(f-1,e)==1    
                            Kor_Image(f-1,e)=255;
                        end

                    end
                    f=i;
                    while Kor_Image(f,e+1)==1 || Kor_Image(f+1,e)==1 || Kor_Image(f,e-1)==1 || Kor_Image(f-1,e)==1
                        f=f+1;
                        if Kor_Image(f,e+1)==1
                            Kor_Image(f,e+1)=255;
                        end
                        if Kor_Image(f+1,e)==1
                            Kor_Image(f+1,e)=255;
                        end
                        if Kor_Image(f,e-1)==1
                            Kor_Image(f,e-1)=255;
                        end
                        if Kor_Image(f-1,e)==1    
                            Kor_Image(f-1,e)=255;
                        end
                   
                    end
            e=e+1;
                end
            end                  
        end
 


relevanter Bereich.jpg
 Beschreibung:

Download
 Dateiname:  relevanter Bereich.jpg
 Dateigröße:  47.99 KB
 Heruntergeladen:  411 mal
Ausgangsbild.jpg
 Beschreibung:

Download
 Dateiname:  Ausgangsbild.jpg
 Dateigröße:  62.77 KB
 Heruntergeladen:  426 mal
Private Nachricht senden Benutzer-Profile anzeigen


Jan S
Moderator

Moderator


Beiträge: 11.057
Anmeldedatum: 08.07.10
Wohnort: Heidelberg
Version: 2009a, 2016b
     Beitrag Verfasst am: 24.04.2016, 10:21     Titel: Re: Erkennen eines Bildbereiches mittels while-Schleife
  Antworten mit Zitat      
Hallo ranzl,

Was ist denn genau Dein Ziel? Wie wäre es ein Quadrat in die "äußeren Pixel" zu fitten und dann alle Pixels zu behalten, die nur eine bestimmte Entfernung davon haben?

Zitat:
Hierzu habe ich eine Schleife entworfen, die einen Großteil der gewünschten Pixel erfasst. Aber sie erfasst erstens nicht alle und zweitens auch unerwünschte. Außerdem ist die Methode sicher nicht die schnellste und eleganteste.

Ob sie schnell ist oder elegant ist weniger wichtig, wenn sie denn zumindest tun würde, was sie soll.

Zitat:
In meinem Programm habe ich den Code 4 mal etabliert.

Diesen Satz verstehe ich nicht.

Gruß, Jan
Private Nachricht senden Benutzer-Profile anzeigen
 
ranzl
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 2
Anmeldedatum: 08.01.16
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 24.04.2016, 10:35     Titel:
  Antworten mit Zitat      
Mein Ziel ist es, dass ich die zusammenhängenden äußeren Pixel, also das Quadrat, behalte und die inneren weißen Pixel "eleminiere". Es soll also nur noch das Quadrat sichtbar sein und alles was im Quadrat liegt soll schwarz werden. Das mit dem Abstand von dem Quadrat kling interessant und wirkungsvoll. Dem Ansatz werde ich mal nachgehen. Hast du eventuell ein kleines Beispiel, an dem ich mich orientieren kann. Im Endeffekt brauche ich ja nur 4 Punkte und dann muss ich den Puffer festlegen?

Mit dem Satz habe ich gemeint, dass ich das Bild auf diese Weise von allen Seiten durchgehe. Einmal von links, einmal von rechts, einmal von oben und einmal von unten.

Danke für die schnelle Antwort und den interessanten Ansatz!
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.