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

Rückgabewert wird überschrieben! Problem mit for?

 

Hilbert86
Forum-Century

Forum-Century


Beiträge: 113
Anmeldedatum: 08.09.09
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 01.12.2009, 19:14     Titel: Rückgabewert wird überschrieben! Problem mit for?
  Antworten mit Zitat      
Hallo Leute

meine Funktion hat einen Fehler und der liegt 100% an der for schleife!
Ich gehe hier ein Bild durch in dem ich Stück für Stück per Imcrop einen Bildausschnitt betrachte. In diesem Bildausschnitt sollen die Pixel gezählt werden und falls es mehr als 20 pixel sind soll mein Rückgabewert Pic um 1 erhöht werden. Nun gibt die Funktion mir aber immer 0 zurück und ich weiß nicht wo der Fehler liegt! Könntet ihr mir vlt sagen wo der Fehler liegt? Kann es sein das Pic immer wieder überschrieben wird?

Code:


function Pic = MyPic(Dilatepic,m,n)
%
%m,n sind die länge bzw. breite des Bildes
Pic=0
MaskeX=70;
MaskeY=70;

for y=1:(n-MaskeY)
            for x=1:(m-MaskeX)
                   
                  I=imcrop(Dilatepic,[x,y,MaskeX,MaskeY]);
                  [row,col]=find(I);
                  Anzahl=[col(:)+x-1,row(:)+y-1];
                  AnzahlPix=size(Anzahl,1);
             %wenn mehr als 20 dann zähle hoch
                if(AnzahlPix>20)
                  Pic=Pic+1;
                  end
end
end




 

_________________

MMAAAAAATTTTTLLAAAAABBBB
Private Nachricht senden Benutzer-Profile anzeigen


derOli
Forum-Meister

Forum-Meister


Beiträge: 579
Anmeldedatum: 19.03.08
Wohnort: Leipzig
Version: 2010a
     Beitrag Verfasst am: 01.12.2009, 19:47     Titel:
  Antworten mit Zitat      
Hi,

ich kann den Fehler höchtens etwas eingrenzen, habe die imcrop funktion leider nicht und auch kein passendes Bild aber folgendes Funktioniert bei mir:

Code:

function Pic = MyPic(Dilatepic,m,n)
%
%m,n sind die länge bzw. breite des Bildes

%Dilatepic=ones(140);
%m=90;
%n=90;

Pic=0
MaskeX=70;
MaskeY=70;

for y=1:(n-MaskeY)
            for x=1:(m-MaskeX)
                   
                  I=ones(70);
                  [row,col]=find(I);
                  Anzahl=[col(:)+x-1,row(:)+y-1];
                  AnzahlPix=size(Anzahl,1);
             %wenn mehr als 20 dann zähle hoch
                if(AnzahlPix>20)
                  Pic=Pic+1;
                  end
end
end


Habe statt der Funktion einfach ones(70) genommen. Dann funktionert alles, m und n müssen natürlich größer als 70 sein. Probier mal den Debugger und/oder die erste Zeile auskommentieren und Testwerte zu benutzen, wie ich das oben schon mal gemacht habe. Vielleicht sind die Werte in dem Bild auch nicht genau 1 sondern etwas weniger?

Viele Grüße,

der Oli
Private Nachricht senden Benutzer-Profile anzeigen
 
Hilbert86
Themenstarter

Forum-Century

Forum-Century


Beiträge: 113
Anmeldedatum: 08.09.09
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 01.12.2009, 19:58     Titel:
  Antworten mit Zitat      
Also das Bild ist ein Binärbild ich versuchs mal mit deiner Methode!
_________________

MMAAAAAATTTTTLLAAAAABBBB
Private Nachricht senden Benutzer-Profile anzeigen
 
derOli
Forum-Meister

Forum-Meister


Beiträge: 579
Anmeldedatum: 19.03.08
Wohnort: Leipzig
Version: 2010a
     Beitrag Verfasst am: 01.12.2009, 20:07     Titel:
  Antworten mit Zitat      
Hi,

mir fällt gerade ein, für imcrop kann man ja auch was ganz einfaches anderes schreiben:

Code:

function Pic = MyPic(Dilatepic,m,n)
%
%m,n sind die länge bzw. breite des Bildes

%Dilatepic=ones(140);
%m=90;
%n=90;

Pic=0
MaskeX=70;
MaskeY=70;

for y=1:(n-MaskeY)
            for x=1:(m-MaskeX)
                   
                  I=Dilatepic(x:x+MaskeX,y:y+MaskeY);
                  [row,col]=find(I);
                  Anzahl=[col(:)+x-1,row(:)+y-1];
                  AnzahlPix=size(Anzahl,1);
             %wenn mehr als 20 dann zähle hoch
                if(AnzahlPix>20)
                  Pic=Pic+1;
                  end
end
end
 


Hab das jetzt mal noch etwas anders folgendermaßen getestet:

Code:

A=zeros(140);
A(31:50,31:50)=ones(20,20);
Pic=myPic(A,140,140);
 


Da kommt bei mir 2374 denke das stimmt so, habe es auch mit anderen Werten getestet.

Hast du mal ein Beispielbild als Binärmatrix?

Viele Grüße,

der Oli
Private Nachricht senden Benutzer-Profile anzeigen
 
Hilbert86
Themenstarter

Forum-Century

Forum-Century


Beiträge: 113
Anmeldedatum: 08.09.09
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 01.12.2009, 20:33     Titel:
  Antworten mit Zitat      
Hi Oli

danke erst mal für deine Hilfe Wink!

Ich habe jetzt deine Imcropersetzung probiert. Das Ergebnis:

Mein Bild ist 360x640 Groß Sprich 230400 Pixel
als Rückgabewert Pic bekomme ich 13487 zurück sind etwa 5% müsste doch hin kommen oder was meinst? habe mal das bild als bmp hochgeladen!

Ich weis nicht warum aber matlab speichert mir das Bild mit einem Weißen rand echt komisch! also denk einfach der weiße rand wäre nicht da Very Happy

BW.jpg
 Beschreibung:

Download
 Dateiname:  BW.jpg
 Dateigröße:  22.82 KB
 Heruntergeladen:  376 mal

_________________

MMAAAAAATTTTTLLAAAAABBBB
Private Nachricht senden Benutzer-Profile anzeigen
 
derOli
Forum-Meister

Forum-Meister


Beiträge: 579
Anmeldedatum: 19.03.08
Wohnort: Leipzig
Version: 2010a
     Beitrag Verfasst am: 01.12.2009, 20:40     Titel:
  Antworten mit Zitat      
Dann liegts anscheinend doch an der cropimage funktion aber soweit ich das gelesen habe hast du die schon richtig verwendet. Spricht erstmal nichts dagegen die andere Variante zu benutzen aber es wäre natürlich auch schön rauszufinden. Warum cropimage nicht so funktioniert wie es sollte.

Viele Grüße,

der Oli
Private Nachricht senden Benutzer-Profile anzeigen
 
Hilbert86
Themenstarter

Forum-Century

Forum-Century


Beiträge: 113
Anmeldedatum: 08.09.09
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 01.12.2009, 21:01     Titel:
  Antworten mit Zitat      
Mal ne andere Frage was müsste ich den schreiben wenn ich das PIC mit anzahl füllen möchte?

Also Anzahl ändert sich ja sehr oft und ich möchte alle Werte die vorkommen in Pic speichern ohne sie zu überschreiben

geht dann

Pic= Pic+Anzahl; ?


wie hängt man an die Fx2 Matrix Pic dann noch mehr Werte von Anzahl an?
_________________

MMAAAAAATTTTTLLAAAAABBBB
Private Nachricht senden Benutzer-Profile anzeigen
 
Hilbert86
Themenstarter

Forum-Century

Forum-Century


Beiträge: 113
Anmeldedatum: 08.09.09
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 01.12.2009, 21:33     Titel:
  Antworten mit Zitat      
ahaa wer sucht der findet! cat macht das Wink))
_________________

MMAAAAAATTTTTLLAAAAABBBB
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 - 2025 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.