У меня есть метод, который вычисляет интегральное изображение (description here), обычно используемое в приложениях компьютерного зрения.iOS - C/C++ - ускорение интегрального вычисления изображения
float *Integral(unsigned char *grayscaleSource, int height, int width, int widthStep)
{
// convert the image to single channel 32f
unsigned char *img = grayscaleSource;
// set up variables for data access
int step = widthStep/sizeof(float);
uint8_t *data = (uint8_t *)img;
float *i_data = (float *)malloc(height * width * sizeof(float));
// first row only
float rs = 0.0f;
for(int j=0; j<width; j++)
{
rs += (float)data[j];
i_data[j] = rs;
}
// remaining cells are sum above and to the left
for(int i=1; i<height; ++i)
{
rs = 0.0f;
for(int j=0; j<width; ++j)
{
rs += data[i*step+j];
i_data[i*step+j] = rs + i_data[(i-1)*step+j];
}
}
// return the integral image
return i_data;
}
Я стараюсь сделать это как можно быстрее. Мне кажется, что это должно быть в состоянии использовать Apple Accelerate.framework
или, возможно, ARM
s neon intrinsics, но я не вижу точно, как это сделать. Похоже, что вложенный цикл потенциально довольно медленный (для приложений в реальном времени как минимум).
Кто-нибудь думает, что это возможно, чтобы ускорить использование любых других методов?
Это не может быть как C++ *, так и объективом c. Выбери один. – Proxy
@Proxy есть что-то под названием Objective-C++ –
@Proxy. Сожалею. Да, C/C++ (или Objective-C++, как упоминал Брайан) на iOS. – Brett