我尝试使用MATLAB调整图像大小,但是在使用双线性模式的imresize函数时,有一些奇怪的问题需要理解。
我将给您一些示例以确保问题所在。假设以下内容是1D矩阵。
展示
此外,
我发现许多来自不同论坛的问题和答案都不能满足我对于普遍性的要求。
然而,我在“imresize.m”文件中的一行代码里找到了答案。
我将给您一些示例以确保问题所在。假设以下内容是1D矩阵。
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函数
是如何产生奇怪的输出的。
但问题是: 我不理解 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)
?它的目的和意义是什么?
imresize
。请查看该函数在实践中是否达到了您的期望...它应该会:https://dev59.com/2V8e5IYBdhLWcg3wEG7A#26143655。 - rayryeng