正反格雷码解相算法,python实现分享,仅供交流学习
此为四步相移+正反格雷码算法的包裹相->展开相
更多传送门:
【条纹结构光投影】分享一下四步相移的代码,仅供交流学习
【条纹结构光投影】相位图去噪算法分享,仅供交流学习
P_img = io.imread('normal.tiff')
height,width = P_img.shape
ori_img_gray = []
# 4张正格雷码 + 4张反格雷码
for i in range(5, 13):
ori_img_gray.append(io.imread(str(i) + '.bmp'))
gray1 = np.zeros((height, width))
gray2 = np.zeros((height, width))
unwrap = np.zeros((height, width))
g_code = 0
b_code = [0] * 8
double_pi = math.pi * 2
for i in range(height):
for j in range(width):
for k in range(4):
if ori_img_gray[k][i, j] > ori_img_gray[k + 4][i, j]:
g_code = 0
else:
g_code = 1
if k == 0:
b_code[k] = g_code
elif b_code[k - 1] != g_code:
b_code[k] = 0
else:
b_code[k] = 1
gray1[i, j] = b_code[0] * 4 + b_code[1] * 2 + b_code[2]
gray2[i, j] = gray1[i, j] * 2 + b_code[3]
if P_img[i, j] <= - double_pi / 4:
unwrap[i, j] = P_img[i, j] + double_pi * gray1[i, j] + double_pi
elif P_img[i, j] > - double_pi / 4 and P_img[i, j] < double_pi / 4:
unwrap[i, j] = P_img[i, j] + double_pi * math.ceil(gray2[i, j] / 2)
else:
unwrap[i, j] = P_img[i, j] + double_pi * gray1[i, j]
io.imsave('unwrap.bmp', unwrap)
io.imsave('unwrap.tiff', unwrap)