Schwarzes Bild

Benutzeravatar
ut53xuco
Mausschubser
Mausschubser
Beiträge: 57
Registriert: 20. Nov 2011 18:07

Re: Schwarzes Bild

Beitrag von ut53xuco »

Hast du mal ein paar andere Pixel verglichen?
Ich glaube dass der erste Filter nicht so viel verändert.

Sonst schreib dir doch mal selber ein paar Werte und schau dir an ob dein Programm da das macht was es soll.

jokke
Windoof-User
Windoof-User
Beiträge: 34
Registriert: 6. Sep 2010 12:18
Kontaktdaten:

Re: Schwarzes Bild

Beitrag von jokke »

Kurze frage: Ist es möglich einen einzelnen float wert aus einem xmm register in ein "normales" register (z.B. eax) zu befördern, und wenn ja, wie?

Oder einen einzelnen float wert direkt an eine speicheraddresse befördern.

mw1039
Computerversteher
Computerversteher
Beiträge: 346
Registriert: 12. Apr 2011 12:18

Re: Schwarzes Bild

Beitrag von mw1039 »

ut53xuco hat geschrieben:Ich glaube dass der erste Filter nicht so viel verändert.
Genau. Der eine Filter leitet das Bild in die eine Richtung ab und der andere Filter glaettet das Bild senkrecht zur Ableitungsrichtung. Wenn du nur den Glaettungsfilter \((0.25, 0.5, 0.25)\) anwendest, veraendert das die Pixelwerte nicht sehr. Der Ableitungsfilter ist der wesentlich wichtigere.

jokke
Windoof-User
Windoof-User
Beiträge: 34
Registriert: 6. Sep 2010 12:18
Kontaktdaten:

Re: Schwarzes Bild

Beitrag von jokke »

jokke hat geschrieben:Kurze frage: Ist es möglich einen einzelnen float wert aus einem xmm register in ein "normales" register (z.B. eax) zu befördern, und wenn ja, wie?

Oder einen einzelnen float wert direkt an eine speicheraddresse befördern.
bump

jokke
Windoof-User
Windoof-User
Beiträge: 34
Registriert: 6. Sep 2010 12:18
Kontaktdaten:

Re: Schwarzes Bild

Beitrag von jokke »

Oh mann, ich werds bestimmt nicht mehr schaffen.. Jetzt bekomme ich einen segfault beim zweiten durchlauf einer schleife in der der horizontalen filter angewandt wird.

die der segfault kommt in dieser Zeile:
"movaps (%%esi), %%xmm0\n"

in esi steht der Pointer von einem float array, indem ein "zwischenergebnissbild" gespeichert wird.
Vor dem Ende der Schleife wird esi um 4 (für float) erhöht. Sonst wird esi nicht angerührt..

Ausserdem brauch ich unbedingt eine möglichkeit um einen der 4 floats eines xmm registers in ein normales register oder eine speicheradresse zu schreiben..

EDIT: Aus Fehlern sollte man lernen.. Es lag wieder an movaps. Mit movups gings. Trotzdem komisch, weil das array mit float* fx_data_1 = (float*)malloc_aligned(...); ja eigentlich aligned sein sollte..

Jetzt fehlt mir nur noch das "extrahieren" eines einzelnen floats aus einem xmm register, dann sollte es klappen.. theoretisch..

simon.r
Mausschubser
Mausschubser
Beiträge: 59
Registriert: 4. Okt 2010 16:13

Re: Schwarzes Bild

Beitrag von simon.r »

movaps erwartet, dass die Adresse auf 16 aligned ist. Da du aber beim horizontalen Filter jeweils nur 4 und keine 16 aufaddierst, ist deine Adresse in esi nach dem ersten Durchlauf nicht mehr aligned. Dieses Problem kannst du lösen, indem du für diese Schleife movups benutzt.
Den ersten Float kann man mittels movss in den Speicher schreiben bzw. vom Speicher laden.

jokke
Windoof-User
Windoof-User
Beiträge: 34
Registriert: 6. Sep 2010 12:18
Kontaktdaten:

Re: Schwarzes Bild

Beitrag von jokke »

Wow cool.. Mein asm sobel läuft! Bekomme ich punktabzug, wenn ich einen rand habe, also nicht extra auf 0 setze.. Ich hab nämlich keinen register frei um die bildbreite zu speichern und dann mit divisionsrest zu prüfen, ob ich am anfang, oder ende einer Zeile bin.

EDIT: Oh mann.. Zu früh gefreut. Beim hauptgebäude bekomm ich einen segfault. Er zeigt aber trotzdem die ticks an..? Bild lässt sich nicht mit einem bildbetrachter öffnen..
Hachiko geht aber auch. Nur eben mit (nicht schwarzem) rand links und rechts..

Antworten

Zurück zu „Archiv“