Ich versuche, ein Stück Code zu schreiben, der ein quadratisches Bild annimmt und einen Scharfzeichenkern anwendet.Schnellste Möglichkeit zu finden, ob eine Zahl im Bereich ist
Ich schaffte es, in meiner Aufgabe erfolgreich zu sein, aber ich war von den Laufzeiten meines Programms enttäuscht. Die Zeit, die es dauert, um ein Bild zu verwischen und zu schärfen (500x500) dauert etwa 16 ms, ich möchte tiefer gehen, habe callgrind
und cachegrind
verwendet und ich sehe, dass mein Cache-Fehler ziemlich niedrig ist (etwa 3%) Ich habe versucht, das Problem einzugrenzen. Ich stelle fest, dass ich jedes Mal, wenn ich den Kernel auf einen Pixel anwende, frage, ob einer der Kanäle im Bereich von [0,255] liegt. Ich würde gerne wissen, ob es eine schnelle Art und Weise zu berechnen ist, wenn Zahl in Bereich ist bisher verwende ich die folgenden Makros:
#define max(a, b) ((a) > (b) ? (a) : (b))
#define min(a, b) ((a) < (b) ? (a) : (b))
Meine Pixel-Struktur:
typedef struct {
unsigned char red;
unsigned char green;
unsigned char blue;
} pixel;
und meine Berechnung:
//p is a struct of pixel.
p.red = min(max(sumRed, 0), 255);
p.green = min(max(sumGreen, 0), 255);
p.blue = min(max(sumBlue, 0), 255);
Was ist der Wertebereich von 'sumRed' und was ist sein Typ? – chux
Warum müssen Sie fragen, ob die Werte im Bereich 0-255 liegen? wenn dies ein Bild von 8bit ist, sollte es nicht gegeben sein? –
Was erhoffst du dir mit 'max (sumRed, 0)'? Dies sind "vorzeichenlose" Werte. –