Nie jestem pewien co dać bo trochę dużo tego. Mam nadzieję że to co dam wystarczy.
Część kodu z klasy DataProcessing.h:
AreaData adProcessing;
...
DataProcessing::DataProcessing(AreaData adReceived){
AreaData adProcessing(adReceived);
adCols = adProcessing.getNumOfCols();
adRows = adProcessing.getNumOfRows();
minDistance = 3;
}
...
void DataProcessing::removeNoise(){
setOpenCVImage();
float x, y, z;
int i, j, k;
for(i = 0; i< adCols; i++){
for(j = 0; j < adRows; j++){
if((*adProcessing.Count)[i][j] > 0.01){
x = (*adProcessing.X)[i][j]/(*adProcessing.Count)[i][j];
y = (*adProcessing.Y)[i][j]/(*adProcessing.Count)[i][j];
z = (*adProcessing.Z)[i][j]/(*adProcessing.Count)[i][j];
data[(j-0)*step+(i-0)*3] = z/1;
data[(j-0)*step+(i-0)*channels + 1] = x/3;
data[(j-0)*step+(i-0)*channels + 2] = 1-(z/1);
/*
if(z <0.60 && z>0.55){
data[(i-begY)*step+(j-begX)*channels + 2] = 1;
}else if(z < 0.55){
data[(i-begY)*step+(j-begX)*channels + 2] = 0.5;
}else{
data[(i-begY)*step+(j-begX)*channels + 2] = 0;
}
*/
}else{
data[(j-0)*step+(i-0)*3] = 1;
data[(j-0)*step+(i-0)*channels + 1] = 0;
data[(j-0)*step+(i-0)*channels + 2] = 0;
}
}
}
}
Konstruktor klasy AreaData
AreaData::AreaData(int cols, int rows){
X = new dynamic_array<float>(cols, rows);
Y = new dynamic_array<float>(cols, rows);
Z = new dynamic_array<float>(cols, rows);
Count = new dynamic_array<int>(cols, rows);
adCols = cols;
adRows = rows;
}
...
AreaData::AreaData(const AreaData &adToCopy){
X = adToCopy.X;
Y = adToCopy.Y;
Z = adToCopy.Z;
Count = adToCopy.Count;
}
X, Y, Z, Count to są tablice dwuwymiarowe.
W sumie to nie wiem czy nie byłoby łatwiej gdybym wrzucił cały kod...
Zapomiałem dodać gdzie się wywala :)
Chodzi o linię;
y = (*adProcessing.Y)[i][j]/(*adProcessing.Count)[i][j];
Dziwne bo wcześniej zawsze chodziło o linię
if((*adProcessing.Count)[i][j] > 0){