R
Wenn man digitale Bildverarbeitung machen will, sollte man schon ein wenig Ahnung vom Programmieren haben.
Hier sind ein paar Optimierungsansätze, allerdings ohne groß über den Algorithmus nachgedacht zu haben:
int R1=0, RR=0;
int R2=0, RR2=0;
const int RR_MAP[26] = { 0, 4, 25, 49, 100, 121, 144, 169, 196, 225, 400, 900, 1600, 2500, 3600, 4900, 6400, 8100, 10000, 14400, 19600, 25600, 32400, 40000, 48400, 57600 };
const int RR2_MAP[26] = { -1, 0, 4, 25, 49, 100, 121, 144, 169, 196, 225, 400, 900, 1600, 2500, 3600, 4900, 6400, 8100, 10000, 14400, 19600, 25600, 32400, 40000, 48400 };
for (n=0; n<480; n++)
{
const int N2 = (n - A1Y) * (n - A1Y); // nur 480 mal berechnen statt 307200 mal!
const int NS2 = (n - A1Y - SY) * (n - A1Y - SY); // nur 480 mal berechnen statt 307200 mal!
for (m=0; m<640; m++)
{
R1=N2+(m-A1X)*(m-A1X);
R2=NS2+(m-A1X-SX)*(m-A1X-SX);
for (int z=0; z<26; z++)
{
RR = RR_MAP[z];
RR2 = RR2_MAP[z];
if ((R1<=RR && R1>RR2) && (m<640-abs(dX)) && (n<480-abs(dY))) // wo kommen dX und dY her?! tests auf dX und dY können schon viel früher gemacht werden!
{
IntRT1[z]=IntRT1[z]+Matrix1[m][n]; // du solltest Matrix1 vorher transponieren für schnelleren speicherzugriff!
}
//IntRT1[z] ist ein 26-Zeilen-Vektor. In jede Zeile kommt dann der aufsummierte Wert eines Integrationsradius
if ((R2<=RR && R2>RR2) && (m<640-abs(dX)) && (n<480-abs(dY))) // wo kommen dX und dY her?! tests auf dX und dY können schon viel früher gemacht werden!
{
IntRT2[z]=IntRT2[z]+Matrix2[m][n]; // du solltest Matrix2 vorher transponieren für schnelleren speicherzugriff!
}
}
}
i++; // wo kommt das i plötzlich her?!
}
for(n=1;n<26;n++)
{
IntRT1[n]=IntRT1[n]+IntRT1[n-1];
IntRT2[n]=IntRT2[n]+IntRT2[n-1];
}