3

UIImage オブジェクト内にある画像の標準偏差を計算する必要があります。一度に 1 つずつ、画像のすべてのピクセルにアクセスする方法を既に知っているので、何とかそれを行うことができます。フレームワークのどこかに、これをより適切かつ効率的な方法で実行する機能があるかどうか疑問に思っています...見つからないので、存在しない可能性があります。誰もこれを行う方法を知っていますか? さよなら

4

2 に答える 2

4

上記の私のコメントをさらに拡張します。Accelerate特に画像のサイズに応じて、フレームワークの使用を検討します。画像が数百ピクセル×数百ピクセルの場合。処理するデータが大量になり、GPU ですべてが処理AcceleratevDSPれるため、すべての計算が大幅に高速化されます。私はこれをもう少し調べて、おそらく数分でいくつかのコードを入れます.

アップデート

を使用して 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 に答える