img2d = ti.types.ndarray(element_dim=1)
img1d = ti.types.ndarray()
@ti.kernel
def bayergb2rgb_parallel(bayergbimg:img1d,mask:img2d,dst:img2d):
print('hello taichi',bayergbimg.shape)
h,w = mask.shape[0],mask.shape[1]
ti.loop_config(parallelize=100, block_dim=1)
for i,j in ti.ndrange(h,w):
real_r = 0
real_g = 0
real_b = 0
num_r = 0
num_g = 0
num_b = 0
ti.loop_config(parallelize=100, block_dim=1)
for x,y in ti.ndrange(3,3):
# 获取当前像素的位置
curr_i = min(max(0, i - 1 + x), h - 1)
curr_j = min(max(0, j - 1 + y), w - 1)
# 获取当前像素的 Bayer 掩码和像素值
r, g, b = mask[curr_i, curr_j]
pixel = bayergbimg[curr_i, curr_j]
real_r+=r*pixel
real_g+=g*pixel
real_b+=b*pixel
num_r+=r
num_g+=g
num_b+=b
real_r/=num_r
real_g/=num_g
real_b/=num_b
#img_filtered[i,j] = real_r,real_g,real_b
# 使用原子操作写入结果到目标图像中
ti.atomic_add(dst[i, j][0], real_r)
ti.atomic_add(dst[i, j][1], real_g)
ti.atomic_add(dst[i, j][2], real_b)
这是我写的把BayerGB图像转成RGB的算法,可以正常运行,计算像素也很快,但是设计到给dst赋值速度就明显慢了。。。。
请问有没有优化方法?
(注释掉最后3行atomic_add的代码测下来只有发现计算像素只要0.0002秒,加上就要超多0.025秒 )
我用的是cpu