如何使用带有imresize的自定义插值内核

最近,我和MathWorks的作家杰西卡·贝尼埃谈论 imresize函数的参考页 . Jessica指出,我们没有一个示例演示如何使用自己的插值内核。在今天的帖子中,我将比较示例图像上支持的插值内核,然后向您展示如何使用自己的内核。金宝app
支持的不同方法金宝app 调整大小 包括…在内 “双线性” , “双三次” , “lanczos2” ,及 “lanczos3” ,对应于使用不同的 插值核 ,亦称 插入剂。 双线性方法使用三角形插值核,其定义如下:
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插值核族 ,其定义如下(带有 a=2" style="vertical-align:-5px"> A. = 2. a=3" style="vertical-align:-5px"> A. = 3. ):
f(x)={sinc(x)sinc(x/a)|x|a0otherwise" style="vertical-align:-14px"> F ( x ) = { 信诺 ( x ) 信诺 ( x / A. ) | x | A. 0 否则
lanczos2=@(x)lanczos(x,2);
lanczos3=@(x)lanczos(x,3);
fplot(lanczos2,[-3.5 3.5])
持有在…上
fplot(lanczos3,[-3.5 3.5])
持有
传奇([“兰索斯2号”,“兰索斯3号”])
插值核通常通过将非常小的图像调整为大几倍来进行测试和比较。以下是一个小图标图像:
图片地址="https://blogs.mathworks.com/steve/files/region-analyzer-icon.png";
A=imread(图像\ url);
imshow(A,“初始放大”,100)
让我们使用各种插值方法将此图像放大10倍,并比较结果。
B_最近=调整大小(A,10,“最近的”);
B_双线性=imresize(A,10,“双线性”);
B_双三次=imresize(A,10,“双三次”);
B_lanczos2=imresize(A,10,“lanczos2”);
B_lanczos3=imresize(A,10,“lanczos3”);
蒙太奇({B_最近,B_双线性,B_双三次,B_lanczos2,B_lanczos3},...
“背景色”,“白色”)
左上角的最近邻结果看起来非常块状。在图像处理工具箱的早期,双线性(中上结果)是默认方法。它在大多数方面都比最近邻的结果好,但看起来确实有点模糊。
双三次结果(右上)和lanczos2结果(左下)非常相似。两个插值核的非零宽度均为4(从 x=-2" style="vertical-align:-5px"> x = - 2. x=2" style="vertical-align:-5px"> x = 2. )两边各有一个负副瓣。这些结果比双线性结果更清晰。例如,仔细观察图像顶部附近的数字“3”和“8”。
lanczos3内核的非零宽度为6,两侧各有一个正负波瓣。lanczos3结果(中下部)比双三次和lanczos2结果更清晰,但存在明显的“振铃”效应。你可以通过在灰色边界外寻找微弱的回声,或者只观察沿着图像中间的黑色粗条纹的左右两侧来看到这一点。
对于这张图片,我更喜欢双三次方法(今天的 调整大小 默认)或lanczos2方法。
有各种各样的研究实验使用不同类型的插值核进行图像处理。例如,胡敏和谭洁清的一篇论文(“图像处理的自适应接触有理插值,” 计算与应用数学杂志 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)作为 调整大小 :
B_osc=imresize(A,10,{@osc,4});
现在将此结果与其他结果进行比较。
蒙太奇({B_最近,B_双线性,B_双三次,B_lanczos2,B_lanczos3,B_osc},...
“背景色”,“白色”)
在我看来,这个新的插值内核产生了最好的结果。它比双三次和lanczos2结果稍微尖锐,对角线边缘稍微平滑,但没有lanczos3结果的环形。但是,全面评估该内核的性能需要检查各种不同的图像和比例因子。
您是否使用过自定义插值内核 调整大小 ? 你用了什么?请留下评论并让我们知道。
谢谢你,杰西卡,提醒我看这个。
功能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=兰索斯(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));
结束
|
  • 打印
  • 发送电子邮件

评论

如需留言,请点击在这里登录到您的MathWorks帐户或创建新帐户。