固定点(快)双线性插值算法。除
用于内(x)的循环,该函数是相同的RGB
的功能,但它们已被单独实现为求
的速度。基本上,我们不希望有检查isRGB
在x-环为每一个像素内,因为它是不必要 -
我们只想要执行的是绝对的操作
内(x)的循环中必要的。
关于定点数学的一些注意事项:
- 固定点数学是执行浮点运算的一种方法
算术整数。
- 举个例子来说,在这里存储的比特的16比特图像是16。
我们需要确保我们不会溢出32位整数
在我们所计算的固定点结果。
- 基本上,一个固定点#被表示为在一个整数
格式,如果,在那里我是代表的比特数的
数的整数部分,而F表示小数
的一部分。
- 当乘以或除以小数位被转移到
左视小数位的#中的数字
被相乘。例如,如果我们乘以16.8
(IF)由另一个16.8号数,我们得到了32.16(48位!)
数作为结果。
- 在下面的功能,你会发现,7位用于
为#的小数部分。这是因为我们能
保证dx和dy的值是0和1之间,所以
他们是0.7#秒。和象素值(取决于#位
存储),可大到16位。因此,如果我们乘
#就像这个一起,我们得到:
16.7*0.7=16.14(30位)。
留1位像素值品牌的(潜在的)迹象
结果一个31位的数字。因此,图7是最大值
我们可以使用这种类型的计算,而无需使用一个64位
整数(这会减慢速度了很多!)。
- 基本上,这是什么意思,如果我们使用7位小数
在#的一部分,是我们可以只计算#S决议
1/128〜0.007。所以,你可以认为这插值
算法作为一个细分每个像素为128×128网格
而插值使用有限部分的dx和dy
(例如,1/128,128分之2,3/128)。
- 这意味着,该算法是不是“真正的”双线性
插值算法,但在大多数情况下它是非常接近的。
最大绝对误差可以计算如下:
考虑4个像素以下邻里:
00
6553565535
其中dx= DY=0.992187(略低于127/128)
使用浮点运算,
yInterpolated1=65535+(0-65535)*(0.992187)=512.025
yInterpolated1=65535+(0-65535)*(0.992187)=512.025
yInterpolated=512.025
使用固定点,
yInterpolated1=65535+(0-65535)*(126/128)=1023.984
yInterpolated1=65535+(0-65535)*(126/128)=1023.984
yInterpolated=1023.984
对于这种极端的情况下,我们通过〜512,其小于
像素值的总范围的1%。这是一个非常极端
情况下 - 在大多数情况下,相邻的像素值是多
靠得更近比这并导致一个更小的误差。
亦认为,这样做插值的目的只是
平滑的图像。与否的算法
并计算*确切*几乎是无关紧要的。该
插数据仅是一个近似值,并且在大多数
情况下(也许除了在锋利的边缘边界)这
近似是相当准确的。
的误差也减小所存储的图像的位
减小。例如,对于一个14位的图像时,错误将
512/4 =128上面显示的极端情况。
关于DICOM的符号表示附注:
在DICOM中,负号表示为2的补码
当符号位为高位,*不*最显著位。
例如,在一个9位带符号的图像,-1将表示为
0000000111111111*不*1111 1111 1111 1111。对于插值
算术,这种表示是有问题的,所以我们
DICOM的表示形式转换为标准表示由
填充比特以上的高位为1的。在上面的例子中,
这意味着,-1将由000000011111 1111变为
1111 1111 1111 1111。