www.vorhilfe.de
- Förderverein -
Der Förderverein.

Gemeinnütziger Verein zur Finanzierung des Projekts Vorhilfe.de.
Hallo Gast!einloggen | registrieren ]
Startseite · Mitglieder · Impressum
Forenbaum
^ Forenbaum
Status VH e.V.
  Status Vereinsforum

Gezeigt werden alle Foren bis zur Tiefe 2

Navigation
 Startseite...
 Suchen
 Impressum
Das Projekt
Server und Internetanbindung werden durch Spenden finanziert.
Organisiert wird das Projekt von unserem Koordinatorenteam.
Hunderte Mitglieder helfen ehrenamtlich in unseren moderierten Foren.
Anbieter der Seite ist der gemeinnützige Verein "Vorhilfe.de e.V.".
Partnerseiten
Weitere Fächer:

Open Source FunktionenplotterFunkyPlot: Kostenloser und quelloffener Funktionenplotter für Linux und andere Betriebssysteme
Forum "Matlab" - sumsum
sumsum < Matlab < Mathe-Software < Mathe < Vorhilfe
Ansicht: [ geschachtelt ] | ^ Forum "Matlab"  | ^^ Alle Foren  | ^ Forenbaum  | Materialien

sumsum: Frage (beantwortet)
Status: (Frage) beantwortet Status 
Datum: 20:37 Sa 03.02.2007
Autor: Bastiane

Hallo!

Ich habe hier eine Musterlösung zu einer Aufgabe, wo ich einen Teil draus nicht verstehe. Und zwar steht dort:

dist=zeros(256,1);
for ind=0:255
  dist(ind+1)=sum(sum(I1==ind));
end

In der ersten Zeile wird also quasi ein Spaltenvektor der "Länge" 256 mit lauter Nullen erzeugt. Und die for-Schleife läuft dann wohl durch alle diese Elemente durch (warum steht da "ind"? Man könnte doch auch genauso einfach "i" schreiben, oder?). So, aber was bitte schön, wird dort gemacht? Was bedeutet "sumsum"? Das konnte ich in der Hilfe von Matlab leider nicht finden. Und "==" scheint wohl auch dort der Vergleichsoperator zu sein, aber was genau wird dort verglichen? I1 ist doch ein Bild (das wurde in einer Aufgabe vorher mal an I1 zugewiesen) und ind ist doch nur der Laufindex der Schleife, oder? Und was wird dann summiert??

Falls es hilft, das ist der Anfang von der Histogrammegalisierung...

Viele Grüße
Bastiane
[cap]


        
Bezug
sumsum: Antwort
Status: (Antwort) fertig Status 
Datum: 00:33 So 04.02.2007
Autor: Martin243

Hallo Bastiane,

da bin ich (hehe). Dann wollen wir mal:

> In der ersten Zeile wird also quasi ein Spaltenvektor der "Länge" 256 mit lauter Nullen erzeugt.

Genau! Das wäre aber gar nicht nötig, weil ja gleich alle Einträge dieses Vektors beschrieben werden. Man kann diese erste Zeile also getrost weglassen, falls die Variable dist noch nicht benutzt wurde. Sonst tut es auch ein "clear dist;".


> Und die for-Schleife läuft dann wohl durch alle diese Elemente durch (warum steht da "ind"? Man könnte doch auch genauso einfach "i" schreiben, oder?).

i ist genauso gut. ind soll vielleicht an Index erinnern, ein sprechenderer Name also? Ansonsten könnte die Variable auch alte_sommerreifen heißen.


> So, aber was bitte schön, wird dort gemacht? Was bedeutet "sumsum"?
> Das konnte ich in der Hilfe von Matlab leider nicht finden.

Da steht ja nicht "sumsum", sondern zweimal "sum". Das sollte in der Hilfe stehen, aber egal: Das Ganze wird auf eine Matrix angewandt, die weiter unten erklärt wird. Das erste sum summiert entlang der Spalten, bildet also einen Zeilenvektor, dessen Einträge die Summen der einzelnen Spalten enthalten. Das zweite (äußere) sum summiert dann diese Summen auf, so dass am Ende ein Skalar dasteht.


> Und "==" scheint wohl auch dort der Vergleichsoperator zu sein, aber was genau wird dort verglichen? I1 ist doch ein Bild (das wurde in einer Aufgabe vorher mal an I1 zugewiesen) und ind ist doch nur der Laufindex der Schleife, oder? Und was wird dann summiert??

Alles richtig! "==" vergleicht und liefert 1 oder 0.
In Matlab gibt es die (sehr nützliche) Besonderheit, dass man Vektoren und Matrizen (auch mehrdimensionale Arrays) mit Skalaren verknüpfen kann. Dann wird jeder Eintrag der Matrix mit diesem Skalar verknüpft. Das Ergebnis ist dann eine Matrix derselben Größe, deren Einträge die Ergebnisse der einzelnen Verknüpfungen sind.
Beim Vergleich ist das Ergebnis eine Matrix aus Einsen und Nullen. An den Stellen mit den Einsen wahr der Vergleich wahr, sonst falsch.
Wenn du also eine Grauwertmatrix I1 mit einem Skalar ind vegleichst, bekommst du eine Matrix, die Einsen an den Stellen enthält, die genau den Grauwert ind haben.
Warum summiert man diese Stellen auf? Das ist nichts anderes als Zählen, denn das Summieren von Einsen ist ja dasselbe, als würde man die Stellen mit diesem Grauwert zählen. Mathematisch wäre das dann:
[mm] $\sum_{(m,n)\in\{1,...,M\}\times\{1,...,N\}, I1(m,n)=ind}1$, [/mm]
zumindest haben wir diese Schreibweise mehrmals bemüht.


Mein Tipp:
Nimm dir eine kleine Bildmatrix, z.B.:
im = floor(10*rand(10));

und schau dir folgende Ergebnisse an:
im == 5
sum(im == 5)
sum(sum(im == 5))


So, ich hoffe, das hilft etwas...


Gruß
Martin

Bezug
                
Bezug
sumsum: besser spät als nie ;-)
Status: (Mitteilung) Reaktion unnötig Status 
Datum: 22:44 Sa 17.02.2007
Autor: Bastiane

Hallo Martin!

Ist zwar seeehr spät, aber ich musste noch für eine andere Klausur lernen und habe mich dann in Computer Vision auch erstmal auf die "Theorie" konzentriert. Aber jetzt brauchte ich ein bisschen Abwechslung, und bevor ich irgendeinen Blödsinn mache, hab' ich mich dann mal wieder an Matlab gesetzt. :-)

Wollte mich noch für diese schöne Antwort bedanken. Habe jetzt verstanden, was dort passiert und somit auch den Rest der Musterlösung. Vielen Dank. [sunny]

Viele Grüße
Bastiane
[cap]

Bezug
                        
Bezug
sumsum: Mitteilung
Status: (Mitteilung) Reaktion unnötig Status 
Datum: 12:14 So 18.02.2007
Autor: Martin243

Hallo,

eine kleine Anmerkung, wo wir schon dabei sind:
Das Erzeugen der "zeros" am Anfang beschleunigt die ganze Sache. Dadurch wird sofort der nötige Speicherplatz alloziert, es muss also der Vektor nicht jedesmal erweitert werden. Also vielleicht doch lieber nicht weglassen...


Gruß
Martin

Bezug
Ansicht: [ geschachtelt ] | ^ Forum "Matlab"  | ^^ Alle Foren  | ^ Forenbaum  | Materialien


^ Seitenanfang ^
ev.vorhilfe.de
[ Startseite | Mitglieder | Impressum ]