void blur_c ( unsigned char *src, unsigned char *dst, int cols, int filas, float sigma, int radius) { float *k_m = kernel_matrix(sigma, radius); int rows_starts_at = radius, rows_ends_at = filas - radius; int cols_starts_at = radius * 4, cols_ends_at = cols * 4 - radius * 4; int i, j, index, col_size = cols * 4; for(i = rows_starts_at; i < rows_ends_at; i++){ for(j = cols_starts_at; j < cols_ends_at; j++){ index = i * (cols * 4) + j; if(index % 4 == 3){ dst[index] = 255; }else{ dst[index] = calculate_convultion(src, radius, k_m, i, j, col_size); } } } free(k_m); }
DenseSymmetricMatrix compute_centered_kernel_matrix(RandomAccessIterator begin, RandomAccessIterator end, KernelCallback callback) { timed_context context("Constructing kPCA centered kernel matrix"); DenseSymmetricMatrix kernel_matrix(end-begin,end-begin); for (RandomAccessIterator i_iter=begin; i_iter!=end; ++i_iter) { for (RandomAccessIterator j_iter=i_iter; j_iter!=end; ++j_iter) { DefaultScalarType k = callback(*i_iter,*j_iter); kernel_matrix(i_iter-begin,j_iter-begin) = k; kernel_matrix(j_iter-begin,i_iter-begin) = k; } } centerMatrix(kernel_matrix); return kernel_matrix; };
inline tapkee::ScalarType operator()(int a, int b) const { return kernel_matrix(a,b); }