Schneller Rechnen im Arbeitsspeicher - Matrix interpolieren
Verfasst: 23.05.2006 11:02
Hallo,
ich habe eine Matrix von 16x16 Werten.
Diese Werte sollen grafisch dargestellt werden, also jedem Wert wird eine Farbe zugeordnet.
Um ein geglättetes Bild zu bekommen werden Zwischenwerte berechnet.
Dabei wird immer das arithmetische Mittel der beiden benachbarten Werte gebildet. Zunächst auf der x-Achse, dann auf der y-Achse.
aus 16x16 wird schrittweise 31x31, dann 61x61, dann 121x121.
Hier der Code, wie derzeit 31x31 berechnet wird.
Da ich pro Sekunde dereit mehr als 10 Matrizen bekomme, habe ich eine recht hohe CPU-Auslastung.
Nun zu meiner Frage: Kann man den Code oben soweit optimieren, daß das ganze deutlich schneller geht.
Ziel wäre es 25 Matrizen pro Sekunde zu verarbeiten.
Vielen Dank
ich habe eine Matrix von 16x16 Werten.
Diese Werte sollen grafisch dargestellt werden, also jedem Wert wird eine Farbe zugeordnet.
Um ein geglättetes Bild zu bekommen werden Zwischenwerte berechnet.
Dabei wird immer das arithmetische Mittel der beiden benachbarten Werte gebildet. Zunächst auf der x-Achse, dann auf der y-Achse.
aus 16x16 wird schrittweise 31x31, dann 61x61, dann 121x121.
Hier der Code, wie derzeit 31x31 berechnet wird.
Code: Alles auswählen
Procedure feld_interpolieren31x31()
x=0
m=0
max=15
For x = 0 To max
For y = 0 To max
feld_interpolierty1(x,m)=feldnormiert(x,y)
m=m+1
feld_interpolierty1(x,m)=(feldnormiert(x,y)+feldnormiert(x,y+1))/2
m=m+1
Next
feld_interpolierty1(x,m)=feldnormiert(x,max)
m=0
Next
m=0
For y = 0 To 30
For x = 0 To max
feld_interpoliert1(m,y)=feld_interpolierty1(x,y)
m=m+1
feld_interpoliert1(m,y)=(feld_interpolierty1(x,y)+feld_interpolierty1(x+1,y))/2
m=m+1
Next
feld_interpoliert1(m,y)=feld_interpolierty1(x,31)
m=0
Next
EndProcedure
Nun zu meiner Frage: Kann man den Code oben soweit optimieren, daß das ganze deutlich schneller geht.
Ziel wäre es 25 Matrizen pro Sekunde zu verarbeiten.
Vielen Dank