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.
Schwarzes Bild
Re: Schwarzes Bild
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.
Oder einen einzelnen float wert direkt an eine speicheraddresse befördern.
Mein Blog -> http://digital-adventures.de
Re: Schwarzes Bild
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.ut53xuco hat geschrieben:Ich glaube dass der erste Filter nicht so viel verändert.
Re: Schwarzes Bild
bumpjokke 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.
Mein Blog -> http://digital-adventures.de
Re: Schwarzes Bild
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..
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..
Mein Blog -> http://digital-adventures.de
Re: Schwarzes Bild
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.
Den ersten Float kann man mittels movss in den Speicher schreiben bzw. vom Speicher laden.
Re: Schwarzes Bild
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..
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..
Mein Blog -> http://digital-adventures.de