在二维数组中,有bmp文件的像素。它的大小是我缩放的宽度(3 * 65536)*高度(3 * 65536)。 就是这样。
<div>
<div class="item"
ng-repeat="version in versions"
ng-class="{active: version.isActive}"
ng-class="{active: }">
<a ng-show = "Your condition for showing or not" ng-click="setDiffed(version)"
ng-class="{active: version.isDiffActive}"
name="compare-type"><i></i>
</a>
<h4 ng-click="setMaster(version)">{{ version.label }}</h4>
</div>
<button type="button" ng-show = "Your condition for showing or not" class="btn btn-primary">
back to home
</button>
</div>
在1和2之间,当我放大原始的2-d阵列时,有2个孔。 (乘以3)
我使用像这样的1-d数组式访问方法。
array [y * width + x]
1 2 3 4
5 6 7 8
9 10 11 12
现在我可以像这个解决方案那样修补漏洞。 在双循环中,条件(j%3 == 1)
index
0 1 2 3 4 5 6 7 8 9...
1 2 3 4 5 6 7 8 9 10 11 12
(this array is actually 2-d array and is scaled by multiplying 3)
在另一个条件下(j%3 == 2)
Image[i*width+j] = Image[i*width+(j-1)]*(1-1/3) + Image[i*width+(j+2)]*(1-2/3)
这就是我知道我可以修补所谓的&#34; Bilinear Interpolation&#34;的方法。
我希望在将此逻辑实现到我的代码之前确定我所知道的内容。谢谢阅读。
答案 0 :(得分:0)
双线性插值要求每个插值像素有2个线性插值通道(水平和垂直)(好吧,其中一些只需要1个),或者每个插值像素最多需要4个源像素。
1到2之间有两个洞。在1到5之间有2个洞。在1到6之间有4个洞。你编写的代码只能在1到2之间修补漏洞,而不能正确修补其他漏洞。
另外,你的除法是整数除法,并不能达到你想要的效果。
通常ypu写一个r=interpolate_between(a,b,x,y)
函数要好得多,它在y和x的步骤x之间进行插值。然后测试并修复。现在使用它来缩放您的图像水平,并在视觉上检查您是否正确(尤其是边缘!)
现在尝试使用它来仅缩放垂直。
现在做水平,然后垂直。
接下来,编写双线性版本,您可以使用线性版本三次测试(将在舍入误差范围内)。然后尝试双线缩放图像,目视检查。
与双线性比例进行比较。它应该只有舍入误差才有所不同。
在这些阶段的每一个阶段,您都会遇到一个可能出错的“新”操作,前面的代码已经过验证。
一次编写所有内容将导致复杂的错误代码。