【问题标题】:increasing the resolution of a grayscale image增加灰度图像的分辨率
【发布时间】:2013-11-29 07:46:35
【问题描述】:

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

【问题讨论】:

    标签: matlab resize image-manipulation


    【解决方案1】:

    您可以“产生幻觉”高分辨率细节。例如,请参阅 Glasner 等人 "Single image Super resolution" ICCV 2009。

    该算法的实现可以在here找到

    【讨论】:

      【解决方案2】:

      您还可以通过对图像进行傅里叶变换、补零、傅里叶逆变换以及取绝对值来执行 sinc 插值。

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

      【讨论】:

        【解决方案3】:

        您需要执行插值。有很多方法可以做到这一点。使用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,并后处理@ 987654333@ 将NaNs 替换为其邻居等。请注意,简单地在linspace(1,size(I,1),rows) 等点进行插值不会给出预期的比例变化。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2017-02-03
          • 1970-01-01
          • 2022-08-22
          • 2017-08-23
          • 2014-05-30
          • 1970-01-01
          • 1970-01-01
          • 2016-02-17
          相关资源
          最近更新 更多