gpt4 book ai didi

javascript - 双线性缩放算法奇怪的效果

转载 作者:搜寻专家 更新时间:2023-10-30 21:09:10 24 4
gpt4 key购买 nike

我编写了一个算法来通过双线性缩放方法缩放图像,但它没有按预期工作。我确实在我的代码中找不到任何错误,但它产生了错误的输出:

enter image description here

    Process(context: ImageData): ImageData {
var imageData = context;

var w = imageData.width;
var h = imageData.height;

var small = new Uint32Array((<any>imageData.data).buffer);
var big = new Uint32Array(small.length * (this.factor * this.factor));

var w2 = this.factor * imageData.width;
var h2 = this.factor * imageData.height;

var x_ratio = ((w) / w2);
var y_ratio = ((h) / h2);

for (var i = 0, f = h2; i < f; ++i) {

var py_a = (i * y_ratio);
var py = py_a | 0;
var py_t = py_a - py;

for (var j = 0, k = w2; j < k; ++j) {
var px_a = (j * x_ratio);
var px = px_a | 0;
var index = ((py * w) + px) | 0;

var px_t = px_a - px;

var fy1 = small[index] + (small[index + 1] - small[index]) * px_t;
var fy2 = small[index + w] + (small[index + w + 1] - small[index + w]) * px_t;

var tmp = fy1 + (fy2 - fy1) * py_t;

big[i * w2 + j] = tmp;
}
}

var ar = new Uint8ClampedArray(big.buffer);
var newImage = new ImageData(ar, w2, h2);

return newImage;
}

我通常想知道是否可以一起处理每个 channel ,还是应该拆分(至少是 alpha)?

最佳答案

channel 必须分开。他们全部。然后相互独立地插值。

否则它们会以奇怪的方式进行干扰,例如,如果您在没有分割的情况下在纯白和纯黑之间进行插值,假设插值是非常细粒度的(大约 224 像素宽),朝向黑色结束你会变红(最低位的 channel ),逐渐变红直到溢出到非常深的绿色,然后再次开始但混合了更多的绿色,重复这种模式几次直到最后它重新开始但是也混入了蓝色。更粗粒度的插值本质上是定期对奇怪的彩虹进行采样。

分别对 channel 进行插值会使所有 channel 以相同的速率(并且不会周期性地回到零)向白色端增加,从而产生灰色梯度,这是预期的。

关于javascript - 双线性缩放算法奇怪的效果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31777091/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com