Steigung aus Matrix berechnen < Matlab < Mathe-Software < Mathe < Vorhilfe
|
Hallo zusammen!
Da ich mich noch nicht allzu gut in Matlab auskenne und ich auch bisher in verschiedenen Foren nichts passendes zu meinem Thema gefunden habe, möchte ich hier mal um Eure Hilfe sowie Unterstützung bitten!
Also nun zu meinem Problem:
Aus einer Intensitäts-Bildmatrix (bspw. 500x600), in der die Werte von einer Geraden liegen, möchte ich den Anfangs- sowie den Endpunkt dieser Gerade ermitteln, um daraus letztendlich mittels atan2 oder cart2pol den Neigungswinkel zu bestimmen. Man muss dazu sagen, dass die Bildmatrix auch Rauschwerte beinhaltet, weswegen es natürlich nicht schlecht wäre, evtl. Intensitätsgrenzen zu setzen (bspw. Intensität von 40 gehört noch zur Geraden dazu, und alles unter 30 ist definitiv Rauschen)...
Natürlich könnte man das Bild auch manuell auslesen, aber da es länger dauert und ich mehrere Bilder auswerten möchte, sollte es auf jeden Fall automatisch ablaufen!!!
Ich habe es schon per for- als auch while-Schleife probiert, bin jedoch leider zu keinem Ergebnis gekommen.
Im Folgenden stelle ich mal ein paar Auszüge meines Codes rein. Wäre echt klasse, wenn mir der ein oder andere helfen könnte, den Code entweder zu verbessern oder mir eine gute Alternative vorzuschlagen.
CODE:
bild = imread('datei.jpg');
[laenge, breite] = size(bild);
igo = 45; %obere Intensitätsgrenze
igu = 40; % untere Intensitätsgrenze
for k=1:breite
for i=1:laenge
%if ig==bild(i,k) | ig+1==bild(i,k) | ig+2==bild(i,k) | ig+3==bild(i,k)
while (igo > bild(i,k) > igu) && ((bild(i,k-1) && bild(i,k+1) && bild(i-1,k)) < 40) & ((bild(i-1,k-1) && bild(i-1,k+1)) <40)
neigung(1,1) = i; %Abspeichern der Zeile in Neigung (sollte danach dann y1 entsprechen)
neigung(1,2) = k; %Abspeichern der Spalte in Neigung (sollte danach x1 entsprechen)
neigung(1,3) = bild(i,k); %Intensitätswert aus i,k wird in Neigung abgespeichert
end
end
end
Falls Fragen bestehen sollten, bitte auch stellen!
Ansonsten schon mal vielen Dank für Eure Mühe!
Ich habe diese Frage in keinem Forum auf anderen Internetseiten gestellt.
|
|
|
|
Status: |
(Antwort) fertig | Datum: | 19:52 Do 07.06.2007 | Autor: | dormant |
Hi!
Von Bild-analyse habe ich keine Ahnung, aber ich glaube ich habe einen Fehler in deinem Code entdeckt zu haben.
Neigung soll eine (knapp 300 000)x3 Matrix sein, oder? An sich macht dein Code 300 000 Überprüfungen der Intensität und speichert die x-y-Werte des letzten Pixels, der die Intesiätsbedinung erfüllt. Die erste Dimension bei neigung muss also ein Index sein und nicht eine 1.
Ich schlage so was vor:
zaehler=1;
for k=1:breite
for i=1:laenge
if ('Intensitätsbedingungen'==true)
neigung(zaehler,1) = i;
neigung(zaehler,2) = k;
neigung(zaehler,3) = bild(i,k);
zaehler=zaehler+1;
end
end
end
Und deine Intensitätsbedingung habe ich auch gar nicht verstanden.
while (igo > bild(i,k) > igu) && ((bild(i,k-1) && bild(i,k+1) && bild(i-1,k)) < 40) & ((bild(i-1,k-1) && bild(i-1,k+1)) <40)
Ich hätte gedacht das liefert einen Syntaxfehler. Das geht bestimmt einfacher. Und mit if.
Gruß,
dormant
|
|
|
|
|
das mit den Bedingungen in der while-Schleife hat folgenden Sinn:
da die Matrix ja mit Rauschwerten versehen ist und die Matrix ja nicht umbedingt genau den Intensitätswert 40 (bspw.) haben muss, muss ich ja gewisse Grenzen setzen.
bild(i,k-1), bild(i-1,k) usw. haben den Sinn, dass ich mir die Werte in den Nachbar-Pixeln anschau, da es mir ja sonst passieren kann, dass ich mitten in der Geraden (mit einer bestimmten Länge und Dicke) den Wert auslese, obwohl das natürlich nicht korrekt sein kann, da der Winkel ja dementsprechend auch dadurch verändert wird, wenn man jetzt den Pixelwert links von der Geraden oder rechts von der Geraden abliest (bspw. wenn die Gerade 10Pixel oder mehr breit ist, aber schief im Bild liegt!)
Ansonsten vom Ansatz her hab ich es auch schon so wie du es mir vorgeschlagen hast, probiert, allerdings werden bei mir leider keine Daten ausgespuckt!
Wäre also echt klasse, wenn mir jmd. helfen könnte!
|
|
|
|
|
Status: |
(Antwort) fertig | Datum: | 16:24 Fr 08.06.2007 | Autor: | dormant |
Hi!
Ich muss zugeben, dass Rausch Herausfilterungskriterien nicht ganz verstehe, aber gehen wir davon aus, die sind i.O. Dann hast du eine Matrix neigung, die an sich keine Neigung enthält, sondern die um Rausch korrigierten Daten. Was willst du damit machen? Dein Code spuckt ja nichts raus, der liest einfach bestimmte Daten ein und filtert welche raus, mehr nicht. Was soll danach passieren?
Gruß,
dormant
|
|
|
|
|
Status: |
(Mitteilung) Reaktion unnötig | Datum: | 18:21 Fr 08.06.2007 | Autor: | histrio82 |
Naja, never mind.... hab das Problem jetzt anders lösen können und funktioniert prima.
Allerdings trotzdem vielen Dank für die Unterstützung!
|
|
|
|