M
Hier mal ein kleines Code-Beispiel, vielleicht kennt sich ja jemand aus:
#include <math.h>
#include "mex.h"
#include "matrix.h"
void mexFunction(int nlhs, mxArray* plhs[], int nrhs, const mxArray* prhs[])
{
int rows, cols;
float* image_in;
float* image_out;
float* ppix;
float* pmean;
mwSize ndim;
const mwSize *dims;
mxArray *pix;
mxArray *mean;
rows = (int)mxGetM(prhs[0]);
cols = (int)mxGetN(prhs[0]);
image_in = mxGetData(prhs[0]);
ndim = mxGetNumberOfDimensions(prhs[0]);
dims = mxGetDimensions(prhs[0]);
plhs[0] = mxCreateNumericArray(ndim, dims, mxSINGLE_CLASS, mxREAL);
image_out = mxGetData(plhs[0]);
pix = mxCreateNumericMatrix(9, 1, mxSINGLE_CLASS, mxREAL);
ppix = mxGetData(pix);
mean = mxCreateNumericMatrix(9, 1, mxSINGLE_CLASS, mxREAL);
pmean = mxGetData(pix);
for(j = 0; j < cols; j++) // loop over cols
{
for(i = 0; i < rows; i++) // loop over rows
{
ppix[0] = image_in[(rows*j-1)+i-1];
ppix[1] = image_in[(rows*j-1)+i];
ppix[2] = image_in[(rows*j-1)+i+1];
ppix[3] = image_in[(rows*j)+i-1];
ppix[4] = image_in[(rows*j)+i];
ppix[5] = image_in[(rows*j)+i+1];
ppix[6] = image_in[(rows*j+1)+i-1];
ppix[7] = image_in[(rows*j+1)+i];
ppix[8] = image_in[(rows*j+1)+i+1];
mexCallMATLAB(1, &mean, 1, &pix, "mean");
}
}
return;
}
Ich weiß, dass der Code nicht komplett ist, ich wollte nur aufzeigen, in welche Richtung mein Problem geht. Möchte halt Varianz und Median genau so berechnen lassen, wie den Mittelwert und die jeweiligen Werte in Vektoren/Arrays speichern, die in ihrer Länge der Anzahl meiner überprüften Nachbarschaften entsprechen, z.B. 9.
Zuletzt möchte ich die Werte in den drei Arrays (Mittelwert, Median, Varianz) mittels der MATLAB-Funktionen min und max vergleichen.
Kann mir da irgendjemand auf die Sprünge helfen und dazu beitragen, meine Verwirrung mit den ganzen Zeigern, C-Arrays, MATLAB-Arrays etc. pp. zu entwirren?