代码如下:
## LL 2020/4/11 14:15
# a demo to generate pattern maps of different frequence.
import numpy as np
import matplotlib.pyplot as plt
import cv2 as cv
def signal_xHz(A,B ,fi, time,N,i):
return A * np.sin( 2 * np.pi * fi * np.linspace(0, time , N) + 2* np.pi/3 * i) + B
def generate_sin_2D(x,y,A,B,fi,time,i):
#生成一个x,y 大小的正选波模板,正弦波幅值为A,中心值为B,采样时长为time,频率为fi,模板序号为i
# 注意: x/time 为采样的频率,采样的频率最好大于最高频的5倍即 x/time = 5~8 fi
a = np.zeros([x, y], np.uint8)
print(a.size)
sin = signal_xHz(A,B,fi,time,x,i);
a[:,:] = sin
img = np.zeros([x, y, 3], np.uint8)
img[:,:,1] = a;
return img
for f in range(1,10):
a1 = generate_sin_2D(480,480,60,120,0.1*f+1,10,0)
name = str(f)+'hz.bmp'
cv.imwrite(name,a1)
# 示例
a = generate_sin_2D(480,480,60,120,1,10,0)
cv.imshow("iamge", a)
cv.waitKey(-1)
print(a)
最后生成的不同的频率模板如下:
补充:后面可能考试需要用到倾斜的相位图的版本,MATLAB代码(矩阵处理这一方面MATLAB还是比Python的Numpy要好用)如下:
% 2020/06/01 by LiuLi
%% x:图像分辨率,N:正弦波周期,savepath:正弦模板图片组存放路径
function save_pattermap_bank(x,N,savepath)
% x = 480;
% N = 8 ;
for i = [0,1,2]
color = uint8(zeros(x,x,3));
deta_phi = 2*pi*N/x;
map = zeros(x,x);
for col = 1:x
phi = linspace(0+(col-1)*deta_phi,2*pi*N+(col-1)*deta_phi,x);
sin_ = 60*sin(phi+2*pi/3*i)+120;
map(col,:) = uint8(sin_);
end
color(:,:,2) = map;
savename = ['pattern', mat2str(i+1) '.bmp'];
savepath_ = [savepath,'/',savename];
imwrite(color,savepath_);
end
end
结果是这样的: