增加灰度图像的分辨率

时间:2013-11-15 19:35:36

标签: matlab resize image-manipulation

我有一个灰度图像,需要提高其分辨率。如何在MATLAB中完成?它主要是通过乘以图像的尺寸来完成的吗?

3 个答案:

答案 0 :(得分:2)

您需要执行插值。有很多方法可以做到这一点。使用imresize(例如imgOut=imresize(img,scale,method);),或者如果您没有图像处理工具箱,请考虑以下代码:

function imres = resizeim(I,outsize,interpalg)

if nargin<3 || isempty(interpalg),
    interpalg='cubic';
end

rows=outsize(1);
cols=outsize(2);

vscale = size(I,1) / rows;
hscale = size(I,2) / cols;

imgClass = class(I);
imres = interp2(double(I), (1:cols)*hscale + 0.5 * (1 - hscale), ...
                   (1:rows)'*vscale + 0.5 * (1 - vscale), ...
                   interpalg);
imres = cast(imres,imgClass);

注意:这是一个艰难的开始。您需要执行预过滤或其他转换。此外,此示例仅支持2D(灰度)图像。对于RGB,将其调整为处理每个颜色平面,或者简单地处理循环中的每个平面。再次,这只是一个例子。

除了边缘处理之外,这与imresize的结果相同,并且关闭了抗锯齿(即imresize(...,'Antialiasing',false))。

关于边缘处理,请参阅interp2的文档以获取有关extrapval参数的信息。代码变得丑陋,但您可以修补插值点(interp2输入)中的最小/最大元素以简单地映射到边缘,或者可以NaN用于extrapval和后期处理imresNaN替换为邻居等。请注意,只需在linspace(1,size(I,1),rows) 等点进行插值,就不会给出预期规模变化。

答案 1 :(得分:1)

您还可以通过对图像进行傅里叶变换,对其进行零填充,对其进行傅里叶逆变换以及获取绝对值来执行正弦插值。

im_rz = abs(ifft2(padarray(fft2(im),[row_pad, col_pad]))) 

答案 2 :(得分:0)

你可以&#34;幻觉&#34;高分辨率细节。参见例如Glasner等"Single image Super resolution" ICCV 2009。

可以找到该算法的实现here