UIImage オブジェクト内にある画像の標準偏差を計算する必要があります。一度に 1 つずつ、画像のすべてのピクセルにアクセスする方法を既に知っているので、何とかそれを行うことができます。フレームワークのどこかに、これをより適切かつ効率的な方法で実行する機能があるかどうか疑問に思っています...見つからないので、存在しない可能性があります。誰もこれを行う方法を知っていますか? さよなら
2 に答える
4
上記の私のコメントをさらに拡張します。Accelerate
特に画像のサイズに応じて、フレームワークの使用を検討します。画像が数百ピクセル×数百ピクセルの場合。処理するデータが大量になり、GPU ですべてが処理Accelerate
さvDSP
れるため、すべての計算が大幅に高速化されます。私はこれをもう少し調べて、おそらく数分でいくつかのコードを入れます.
アップデート
を使用して 1 次元で標準偏差を実行するコードを投稿しますvDSP
が、これは間違いなく 2 次元に拡張できます。
float *imageR = [0.1,0.2,0.3,0.4,...]; // vector of values
int numValues = 100; // number of values in imageR
float mean = 0; // place holder for mean
vDSP_meanv(imageR,1,&mean,numValues); // find the mean of the vector
mean = -1*mean // Invert mean so when we add it is actually subtraction
float *subMeanVec = (float*)calloc(numValues,sizeof(float)); // placeholder vector
vDSP_vsadd(imageR,1,&mean,subMeanVec,1,numValues) // subtract mean from vector
free(imageR); // free memory
float *squared = (float*)calloc(numValues,sizeof(float)); // placeholder for squared vector
vDSP_vsq(subMeanVec,1,squared,1,numValues); // Square vector element by element
free(subMeanVec); // free some memory
float sum = 0; // place holder for sum
vDSP_sve(squared,1,&sum,numValues); sum entire vector
free(squared); // free squared vector
float stdDev = sqrt(sum/numValues); // calculated std deviation
于 2013-07-15T13:01:36.013 に答える