1.双线性插值
2.平方插值
if ((sub_a_b>Th_value) && dx <= 0.5)
k1_dx = 2*(dx ^ 2);
elseif ((sub_a_b>Th_value) && dx > 0.5)
k1_dx = -2*((dx-1)^2)+1;
elseif (sub_a_b <= Th_value)
k1_dx = dx;
end
3.分段函数插值法
for k= 2:1:5;
for a= (0.5-(0.5/k)):0.1:0.5;
if ((sub_a_b>Th_value) && dx <= a)
k1_dx = (k-(k/(2*a))+(0.5/a))*dx;
elseif ((sub_a_b>Th_value) && dx > a && dx < 1-a)
k1_dx = k*(dx-0.5)+0.5;
elseif ((sub_a_b>Th_value) && dx >= 1-a)
k1_dx = (k-(0.5*k/a)+(0.5/a))*(dx-1)+1;
elseif (sub_a_b <= Th_value)
k1_dx = dx;
end
end
end
针对上述对应关系,n=6,8,10时,k,a组合方针效果最好
说明对于一个特定的k值而言,a越小越好
k=1 a=0
k=2 a=0.2500
k=3 a=0.3333
k=4 a=0.3750
k=5 a=0.4000
k=6 a=0.4167
k=7 a=0.4286
k=8 a=0.4375
4.PS梯形矫正坐标变化
矫正值
缩放比例
左上角坐标
右上角坐标
2
99
4,2
内容
4
97
15,8
内容
6
96
19,11
内容
8
95
30,16
内容
10
93
41,23
内容
12
92
45,25
内容
14
91
55,31
内容
16
90
60,34
内容
18
88
71,40
内容
5.摩尔纹的根本原因
图像出现摩尔纹的根本原因是单像素直线在发生旋转时,势必会出现像素错位,下图中的黑白条纹图中,以从左边为起点的一条黑条纹为例。它会在中间某个位置渐变为白色,我把它称之为渐变区。从上至下所有的渐变区域连在一起就会形成摩尔纹。单条摩尔纹的宽度由渐变区的宽度决定,摩尔纹的密度由线条倾斜的角度决定。
所以对于单像素线条(极窄线条)而言,摩尔纹是无法避免的,而且线条的倾斜角度也是无法控制的,所以我们能做的就是缩短渐变区的宽度。但是缩短渐变区的宽度会带来图像锯齿化现象的加剧。因为线条没有那么平滑了。所以我们需要分情况考虑。这里我需要提到一点渐变区的宽度还决定于插值区四个点像素值的变化率。如果某个区域像素值的变化率过大,类似于我们这里的黑白条纹区域(像素要么是0要么是255),那么此时容易造成较大的渐变区。这时我们采用权重变化陡峭的插值法来缩短渐变区的宽度。如果某个区域的像素变化率不大,那么我们就采用更平滑的标准双线性插值。来得到较为平滑的图像。
个人认为没有必要过分较真单像素线的摩尔纹现象,更应该关注实际图像的显示效果
投影测试
在投影上做测试,感觉投影仪的显示效果和笔记本电脑不太一样。对于不做gamma处理的图片笔记本电脑上有很明显的摩尔纹,但是在投影仪上打出来的效果看着就没有摩尔纹。所以我得出结论,由于每一块display的性能都有差异。显示效果也会有差。这主要是不同屏幕的gamma值不同导致的。
定点数调试1 (分辨率215*212 shift=50)
fraction_len
坐标2
坐标3
坐标4
golden
214,50
0,161
164,211
5
210,51
4,158
165,209
6
212,52
2,160
163,211
7
214,50
0,160
165,211
8
214,50
0,161
164,211
9
214,50
0,161
164,211
定点数调试2 (分辨率1920*1080 shift=50)
fraction_len
坐标4
golden
1870,1080
8
1913,1074
9
1918.9,1077.2
10
1919.9,1079
11
1919.9,1079
12
1919.9,1079.8
13
1919.9,1079.8
调试日志
当fraction_len=20 , word_len=32时,其他图片都正常,circle_keystone4不正常
num2fixpt函数超过表示范围将变为负数或者0.但是fi函数不一样,fi函数转化定点数,若待转化值小于最小精度,那么转化值截断为最小精度。若待转化值大于最大表示范围,那么转化值将截断为能表示的最大数.
建议不要使用num2fixpt,建议使用fi函数。使用fi函数以后inv_pos可以计算的很精准
fi函数转换checker.jpg生成7张图耗时 10min 43s
num2fixpt函数转换checker.jpg生成7张图耗时 1min43秒
不过当fraction_len小于5时,使用num2fixpt函数来转换checker.jpg,生成的图像会有严重的变形
num2fixpt与fi 误差和比较
fraction_len
num2fixpt
fi
8
1913,1074
9
1918.9,1077.2
10
1919.9,1079
11
1919.9,1079
12
1919.9,1079.8
13
1919.9,1079.8
w值范围
经过统计正确的w值全部落在 1
下图表示
在1<=w<2时有10322848个点
双精度浮点数跑出来的结果(0.9
8/16
在跑keystones2的时候会出现小于1的w
首先介绍双精度
然后介绍定点化
8/27
随机验证k=0:100(base=0.9 incr=0.05)
随机验证k=0:500(base=0.9 incr=0.05)
把范围暂且定为0.875 < w <1.250;
8/28
move_points是以下的点时会有异常情况出现
此时i=1023,j=1920.计算结果如下:w=0.89997767
VCS仿真测试事项:
两个低位宽数做乘法是否需要做位扩展
比如8位数a乘8位数b然后右移8位,结果赋值给一个8位数c。结果是否会被截断为0
结果会被截断,可以使用如下方法;
reg [7:0] a,b,c;
wire [15:0] tmp;
assign tmp = (a*b)>>8;
always @(posedge i_clk)
begin
c <= tmp;
end
有符号数乘法测试
8位有符号数a 乘 8位无符号数b 。如果不对b做有符号转化,结果如何
结论:不能对有符号的负数做>>或者是<
reg signed [7:0] a = -64(0xc0);
a = a>>1;
做了移位操作后,a=96(0x60).
不过可以自行做位操作
reg signed [7:0] a = -64(0xc0);
a = {1'b1,a[7:1]};
此时操作后a=-32
一种合适的有符号数移位方式