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

Fuktion um aus RGB Daten die Norm zu berechnen

 

Frederike

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 17.11.2020, 13:36     Titel: Fuktion um aus RGB Daten die Norm zu berechnen
  Antworten mit Zitat      
Hallo,

Ich soll eine Funktion schreiben u mein RGB Bild in ein Graustufen Bild umzuwandeln. Hierzu soll ich die einzelnen Matrix Elemente durch die Pixel aij b teilen und aij berechne ich über die Formel :  aij = sqrt(aijrot^2+ aijgruen^2+ aijblau^2)  .

Code:


function BildGray = myrgbtogray(bild)

[m,n] = size(bild);  %Anzahl Spalten in m und Anzahl Spalten in n

BildGray = size(bild);

for i = 1:m
    for j = 1:n
        BildGray(i,j) = bild(i,j) / sqrt(bild(i,j,1).^2 + bild(i,j,2).^2 + bild(i.j,3).^2 );
    end
end


end

 


Das ist die Funktion die ich geschrieben habe und nun bekomme ich die Fehlermeldung "Struct contents reference from a non-struct array object."

Vielleicht kann mir ja jemand sagen wo mein Fehler ist Smile

Viele Grüße
Frederike


Harald
Forum-Meister

Forum-Meister


Beiträge: 24.448
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 17.11.2020, 13:48     Titel:
  Antworten mit Zitat      
Hallo,

ein Tippfehler: bild(i,j,3)

bild ist vermutlich 3D? Du indizierst aber einmal mit bild(i,j), was eher nach 2D aussieht. Ich sehe auch nicht, wo nun der Übergang von 3D zu 2D stattfindet. Durch die Division findet m.E. nur eine Umskalierung statt.

Im übrigen sollte das ganze auch ohne for-Schleifen gehen.

Grüße,
Harald
_________________

1.) Ask MATLAB Documentation
2.) Search gomatlab.de, google.de or MATLAB Answers
3.) Ask Technical Support of MathWorks
4.) Go mad, your problem is unsolvable ;)
Private Nachricht senden Benutzer-Profile anzeigen
 
Frederike

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 17.11.2020, 14:40     Titel:
  Antworten mit Zitat      
Hallo Harald,

Vielen lieben Dank für deine Antwort.

Das Bild ist eine mxnx3 Matrix und die 3 steht für die 3 Farbkanäle des Bildes. Und die Funktion soll dann am Ende ein Bild der größe mxn erzeugen(ein grauwert Bild) .
Ich habe gerade gesehend das ich es doch nicht teilen muss. Ich muss nur die Formel implementieren und über die Formel die neuen Matrixelemente des Bildes berechnen.


Meine Idee war das ich mt den 2 For Schleifen über jedes Pixel des Bildes laufe und dann die neuen Werte über die Formel berechne.

Nun habe ich den Tippfehler korrigiert und auch das / fürs teilen entfernt und nun kommt die Fehlermeldung "Index exceeds matrix dimensions. " Soweit ich es heruasgefunden habe, heißt die Fehlermeldung das ich auf Matrix Elemente zugreifen will, die ich nicht habe aber ich weiß leider nicht an welcher Stelle mein Fehler im Code ist.
Vielleicht hat ja jemand hier noch einen tipp für mich Smile

lg Frederike
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.448
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 17.11.2020, 15:19     Titel:
  Antworten mit Zitat      
Hallo,

poste bitte deinen aktuellen Code.

Zitat:
Meine Idee war das ich mt den 2 For Schleifen über jedes Pixel des Bildes laufe und dann die neuen Werte über die Formel berechne.

Ich verstehe die Idee. Das macht aber den MATLAB-Code (unnötig) komplex.

Grüße,
Harald
_________________

1.) Ask MATLAB Documentation
2.) Search gomatlab.de, google.de or MATLAB Answers
3.) Ask Technical Support of MathWorks
4.) Go mad, your problem is unsolvable ;)
Private Nachricht senden Benutzer-Profile anzeigen
 
Frederike

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 17.11.2020, 15:49     Titel:
  Antworten mit Zitat      
Hallo,
Anbei einmal mein aktueller Code

Code:

function BildGray = myrgbtogray(bild)

[m,n] = size(bild);  %Anzahl Spalten in m und Anzahl Spalten in n

BildGray = size(bild);

for i = 1:m
    for j = 1:n
        BildGray(i,j) = sqrt(bild(i,j,1).^2 + bild(i,j,2).^2 + bild(i,j,3).^2 );
    end
end


end
 


Viele Grüße
Frederike
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.448
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 17.11.2020, 16:23     Titel:
  Antworten mit Zitat      
Hallo,

Für solche Probleme würde ich den Debugger verwenden.

Das Problem dürfte die Vorbelegung von BildGray sein. Stand jetzt ist das ein Vektor von drei Zahlen. Sinnvoller fände ich
Code:
[m,n] = size(bild);
BildGray = zeros(m,n);


Meines Erachtens sollte ich der Inhalt der Funktion in einer Zeile zusammenfassen lassen:
Code:
BildGray = sqrt( sum(bild.^2, 3) );


Grüße,
Harald
_________________

1.) Ask MATLAB Documentation
2.) Search gomatlab.de, google.de or MATLAB Answers
3.) Ask Technical Support of MathWorks
4.) Go mad, your problem is unsolvable ;)
Private Nachricht senden Benutzer-Profile anzeigen
 
Frederike

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 17.11.2020, 18:53     Titel:
  Antworten mit Zitat      
Hallo Harald,

Super vielen Dank für deine Antwort. Mit deiner Idee mit einer Zeile Code klappt es aber mit den 2 For Schleifen nicht. Ich verusche gerade herauszufinden wo mein Fehler ist, da ich gerne verstehen würde warum das mit den 2 For Schleifen nicht klappt.

Weißt du vielleicht woran es liegt das es mit den For Schleifen nicht klappt?

Das ist nun mein aktueller Code
Code:


function BildGray = myrgbtogray(bild)

[m,n] = size(bild);  %Anzahl Spalten in m und Anzahl Spalten in n

BildGray = zeros(m,n);

for i = 1:m
    for j = 1:n
        BildGray(i,j) = sqrt(bild(i,j,1).^2 + bild(i,j,2).^2 + bild(i,j,3).^2 );
    end
end

end

 

Ich bekomme immer noch diese Fehlermeldung:
Index exceeds matrix dimensions.

Viele Grüße
Frederike
 
Frederike

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 17.11.2020, 19:15     Titel:
  Antworten mit Zitat      
Moin Harald,

Ich habe den Fehler selbst gefunden durch Debugging Smile
Nun klappt alles wie es soll! Vielen lieben Dank nochmal für deine Hilfe.

Viele Grüße
Frederike
 
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.