gpt4 book ai didi

matlab - imresize 双线性 MATLAB

转载 作者:行者123 更新时间:2023-12-04 03:14:52 25 4
gpt4 key购买 nike

我尝试使用 MATLAB 调整图像的大小,但直接了解有关使用双线性模式的 imresize 函数有些奇怪。

我会给你一些例子来确定问题出在哪里。比如说,以下是一维矩阵。

A: [0 1 2]
B: [1 2 0 5]

据我所知,在一维数组中将 A 缩放到 [1,5] 的线性插值使得

A: [0, 0.5, 1, 1.5, 2]

但是,从 MATLAB,

imresize(A,[1,5],'bilinear')

表演

[0, 0.4, 1, 1.6, 2.0]

此外,

imresize(B,[1,5],'bilinear')
imresize(B,[1,10],'bilinear')

每个,显示

[1.0 1.7 1.0 1.5 2.0]
[1.0 1.1667 1.16111 1.8889 1.0000 0.1111 1.9444 4.1667 5.0000]

我从不同的论坛上找到了很多问题和答案,就一般性而言,没有一个让我满意。

然而,我从'imresize.m'中的一行代码中找到了答案,

u = x/scale + 0.5 * (1-1/scale)

其中 u 确定输出矩阵的索引。从上面,我意识到 imresize with bilinear

是如何产生奇怪的输出的

但问题是,我不明白 0.5 * (1-1/scale) 的意思。

在没有0.5 * (1-1/scale)的情况下,u = x/scale显示了可以输出的原始算法

A: [0, 0.5, 1, 1.5, 2],这是真正的线性。

那么,为什么我们需要术语0.5 * (1-1/scale)?目的和意义是什么?

最佳答案

假设你的图片是A = [ 0 1 2];所以我们可以将图像像素的结构可视化为

     _________ _________ _________ 
| | | |
| 0 | 1 | 2 |
|_________|_________|_________|

0 0.5 1 1.5 2 2.5 3

它的 x 坐标范围从 0 到 3,像素值的位置假定在它的中心。

当我们想要将图像的大小调整为 5 像素时,我们应该找到应该从原始图像中提取值的位置。为此,我们将 [0:5] 乘以 3/5

     _____ _____ _____ _____ _____ 
| | | | | |
| | | | | |
|_____|_____|_____|_____|_____|

0 3/5 6/5 9/5 12/5 3

为了找到像素中心的位置,我们将 ([0:4] + .5) 乘以 3/5

((0:4) + .5) * 3/5

ans =
0.3 0.9 1.5 2.1 2.7

因此,例如,要找到缩放图像中第二个像素的值,我们应该引用原始图像中的位置 0.9 并提取(插值)该像素的值为 0.4 的值。

     _____ _____ _____ _____ _____ 
| | | | | |
| | 0.4 | 1 | 1.6 | |
|_____|_____|_____|_____|_____|

0.3 0.9 1.5 2.1 2.7

第一个和最后一个像素的值(通常是那些位置超过[0.5-2.5]的像素)分别设置为与原始图像的第一个和最后一个像素相同。

     _____ _____ _____ _____ _____ 
| | | | | |
| 0 | 0.4 | 1 | 1.6 | 2 |
|_____|_____|_____|_____|_____|

关于matlab - imresize 双线性 MATLAB,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42020435/

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