如何使用自定义插值内核与IMResize

最近,我正在与Mathworks作家Jessica Benier交谈 IMResize函数的参考页面 。杰西卡指出,我们没有一个示例,该示例显示了如何使用自己的插值内核。在今天的帖子中,我将在样本图像上比较支持的插值内核,然后我将向您展示万博1manbetx如何使用自己的内核。
支持的不同方法万博1manbetx imresize , 包括 '双线性' 'bicubic' 'lanczos2' , 和 'lanczos3' ,对应于使用不同 插值内核 ,也被称为 interpolants。 Bilinear方法使用三角插值内核,该内核被定义为:
f(x)={1-|x||x|10otherwise" style="vertical-align:-14px"> F X = { 1 - | X | | X | ≤. 1 0. 除此以外
fplot(@triangle,[ - 3.5 3.5])
(功能 三角形 ,以及此帖子中使用的其他插值内核功能最终。)
双臂方法使用此分段立方插值核:
f(x)={1.5|x|3-2.5|x|2+1|x|1-0.5|x|3+2.5|x|2-4|x|+21|x|20otherwise" style="vertical-align:-25px"> F X = { 1 5. | X | 3. - 2 5. | X | 2 + 1 | X | ≤. 1 - 0. 5. | X | 3. + 2 5. | X | 2 - 4. | X | + 2 1 ≤. | X | ≤. 2 0. 除此以外
fplot(@cubic,[ - 3.5 3.5])
Lanczos2和Lanczos3方法基于 Lanczos Interpolation仁的家庭 ,它定义如下(与 a=2" style="vertical-align:-5px"> 一种 = 2 或者 a=3" style="vertical-align:-5px"> 一种 = 3. ):
f(x)={sinc(x)sinc(x/a)|x|a0otherwise" style="vertical-align:-14px"> F X = { Sinc. X Sinc. X / 一种 | X | ≤. 一种 0. 除此以外
lanczos2 = @(x)lanczos(x,2);
lanczos3 = @(x)lanczos(x,3);
Fplot(Lanczos2,[ - 3.5 3.5])
抓住
Fplot(Lanczos3,[ - 3.5 3.5])
抓住离开
传奇([“lanczos 2”“Lanczos 3”])
通过调整非常小的图像的大小,通常测试插值内核,并比较几倍。这是一个小图标图像:
image_url =.“https://blogs.mathworks.com/steve/files/region-analyzer-icon.png”;
a = imread(image_url);
imshow(a,“initialMagnification”,100)
让我们使用各种插值方法将此图像缩放10倍,并比较结果。
b_nearest = imresize(a,10,'最近');
b_bilinear = imresize(a,10,'双线性');
b_bicubic = imresize(a,10,'bicubic');
b_lanczos2 = imresize(a,10,'lanczos2');
b_lanczos3 = imresize(a,10,'lanczos3');
蒙太奇({b_nearest,b_bilinear,b_bicubic,b_lanczos2,b_lanczos3},......
“背景颜色”“白色的”
左上角的最近邻居结果似乎很细分。在图像处理工具箱的早期,双线性(中间结果)是默认方法。在大多数方面比最近邻的结果更好,但它看起来有点模糊。
Bicubic结果(右上角)和Lanczos2结果(左下角)出现非常相似。两个插值内核都有4个非零宽度(来自 x=-2" style="vertical-align:-5px"> X = - 2 x=2" style="vertical-align:-5px"> X = 2 )每侧有一个负侧凸。这些结果比Bilinear结果锐利。例如,在图像顶部附近仔细观察位“3”和“8”。
Lanczos3内核的非零宽度为6,每侧有负和正凸角。Lanczos3结果(下层中间)比双方和兰策2的结果锐利,但它受到可见的“振铃”效果。您可以通过查找灰色边界外的微弱回声来查看此内容,或者看起来只需沿着图像中间运行的厚黑条纹的左右左右即可。
对于此图像,我更喜欢双方方法(今天的 imresize 默认)或landzos2方法。
有多种研究实验,具有不同类型的插值核,用于图像处理。例如,Min Hu和Jieqing Tan的纸张(“图像处理的自适应静脉室合理插值” 计算和应用数学杂志 195(2006)46-53)探讨了分段合理功能的使用:
f(x)={-0.168|x|2-0.9129|x|+1.0808|x|2-0.8319|x|+1.0808|x|10.1953|x|2-0.5858|x|+0.3905|x|2-2.4402|x|+1.76761<|x|202<|x|" style="vertical-align:-44px"> F X = { - 0. 168. | X | 2 - 0. 9129. | X | + 1 0808 | X | 2 - 0. 8319. | X | + 1 0808 | X | ≤. 1 0. 1953年 | X | 2 - 0. 5858. | X | + 0. 3905 | X | 2 - 2 4402. | X | + 1 7676. 1 < | X | ≤. 2 0. 2 < | X |
这是什么样子:
Fplot(@ osc,[ - 3.5 3.5])
要使用此内核调整图像大小,请指定函数句柄和非零内核宽度(在本例中为4,在此情况下)作为方法 imresize
b_om = imresize(a,10,{@ occ,4});
现在将此结果与其他结果进行比较。
蒙太奇({B_NEAREST,B_BILINEAR,B_BICUBIC,B_LANCZOS2,B_LANCZOS3,B_OSC},......
“背景颜色”“白色的”
对我的眼睛来说,这个较新的插值内核产生了束的最佳结果。它比双方和Lanczos2的结果略锐,略带更平滑的对角线,但没有铃声3结果的振铃。但是,完全评估了这个内核的表现,需要检查各种不同的图像和比例因素。
你有没有使用过自定义插值内核 imresize ?你用了什么?留下评论,让我们知道。
谢谢,杰西卡,提示我来看看这个。
功能f =三角形(x)
f =(1 - abs(x))。*(abs(x)<= 1);
结尾
功能f =立方(x)
absx = abs(x);
absx2 = absx。^ 2;
absx3 = absx。^ 3;
f =(1.5 * absx3 - 2.5 * absx2 + 1)。*(absx <= 1)+......
(-0.5 * absx3 + 2.5 * absx2 - 4 * absx + 2)。*......
((1
结尾
功能f = lanczos(x,a)
f = a * sin(pi * x)。* sin(pi * x / a)./......
(pi ^ 2 * x。^ 2);
f(ABS(x)> a)= 0;
f(x == 0)= 1;
结尾
功能f = osc(x)
absx = abs(x);
absx2 = absx。^ 2;
f =(absx <= 1)。*......
((-0.168 * absx2 - 0.9129 * absx + 1.0808)./(absx2 - 0.8319 * absx + 1.0808))......
+......
((1 ......
((0.1953 * absx2 - 0.5858 * absx + 0.3905)./(absx2 - 2.4402 * absx + 1.7676));
结尾
|
  • 打印
  • 发送电子邮件

注释

要发表评论,请点击<一种href="//www.tianjin-qmedu.com/blogs/login?uri=/steve/2021/05/13/how-to-use-a-custom-interpolation-kernel-with-imresize/">这里登录您的MathWorks帐户或创建新的。