【问题标题】:Resizing in MATLAB w/ different filters在 MATLAB 中使用不同的过滤器调整大小
【发布时间】:2013-01-21 12:14:27
【问题描述】:
我有一张图片。我想将其调整为原始大小的两倍,通过插值填充新像素。我需要指定要使用的插值类型。
我看到了 imresize 函数,它有一个“方法”选项。问题是,只有 3 个选项:最近、双线性、双三次。双线性和双三次是平均/均值方法,但是有什么方法可以设置邻域大小/权重?
主要问题是,我需要使用“中值”插值方法,而不是平均值。如何告诉它使用这种方法?
【问题讨论】:
标签:
image
matlab
filter
interpolation
【解决方案1】:
IMRESIZE 实现插值的方式是通过计算输出图像中的每个像素(逆映射)、输入图像中将参与插值的像素的索引以及贡献权重。
邻域和权重由使用的插值内核的类型确定,正如@Albert 指出的那样,可以将其传递给 IMRESIZE 函数('Method' 属性可以接受 {f,w} 一个具有核函数和核宽度)
这两个组件将用于计算所涉及的输入像素的线性组合,以填充输出像素的每个值。此过程一次一个地沿每个维度执行(垂直然后水平)。
现在你的问题是你永远无法通过使用线性组合来获得中值,这是因为中值是一个非线性排序过滤器。所以你唯一的选择是编写你自己的实现......
【解决方案2】:
Amro 是正确的,中值滤波器不能计算为加权响应。但是 MATLAB 有一个特定的中值滤波器函数:medfilt2。
【解决方案3】:
imresize 有第三种传递插值方法:“Two-element Cell Array Specifying Interpolation Kernel”。您可以在Matlab's documentation 中阅读更多相关信息。