【问题标题】:Reducing the spacial resolution using the nearest-neighbor resampling formula in MATLAB使用 MATLAB 中的最近邻重采样公式降低空间分辨率
【发布时间】:2014-09-13 13:10:19
【问题描述】:

我正在尝试在 matlab 中编写一个函数,该函数将返回一个缩小到大小的图像MS = 原始图像中的 x 分辨率长度和NS= 原始图像中 y 分辨率的长度,使用最接近的邻居公式。

我遇到了一个越​​界异常,并且在确定解决方案时遇到了一些困难。我认为我需要另一个条件检查。目前,对于我的图像,它正在尝试访问 d(1309,27),但是它不应该访问该值,因为它在 for 循环中是有界的 MNfor ms = 1:M

     function  r  = imaging( s, M, N, L )
     %imaging Computes the acquisition of the image
         s= imread('Z:\file.tif');
         figure, imshow(s);


         d = im2double(s);

         [MS, NS] = size(d);

         M = 400;
         N = 100;

         dx = M/MS;
         dy = N/NS;

         for ms = 1:M
            mp= floor( (ms +0.5)/dx ) ;
               for ns = 1:N
                  if(d(ms,ns))
                  np= floor( (ns +0.5)/dy ) ;
                  r(ms,ns)= d(mp,np);
               end
         end
    end

【问题讨论】:

  • 为什么不使用imresize
  • 我基本上是在学习 imresize 背后的功能。它是作为一项任务分配的,所以我不是在寻找可行的解决方案,而是寻求正确解决方案的帮助。

标签: image matlab nearest-neighbor


【解决方案1】:

我假设您的最近邻调整大小不是按比例缩放的。如果要按比例缩放,您应该使用 imresize 功能来简化您的生活。如果不是按比例缩放,您应该使用以下代码为您的索引创建一个查找表。

round( linspace( 1, MS, M ) )

索引代表最终的图像索引。输出表示它应该在原始图像中查找的索引。这是针对M情况的,对于N情况也可以这样说。您的最终代码应如下所示。测试和工作如下。

% Image init
s = imread( 'bag.png' );
figure; imshow( s );
d = im2double( s );

% Get sizes
[MS, NS] = size( d );
M = 400;
N = 100;

% Create image
r = zeros( M, N );

% Create table lookup
lookupM = round( linspace( 1, MS, M ) );
lookupN = round( linspace( 1, NS, N ) );

% Assign New R
for ms = 1:M
    for ns = 1:N
        r(ms,ns) = d( lookupM( ms ), lookupN( ns ) );
    end
end

% Display output
figure; imshow(r);

如果您有任何问题,请告诉我。我对发布 StackOverflow 响应还是个新手。

编辑:使用 linspace 函数而不是 interp1 函数

【讨论】:

  • @codeDaily 我愚蠢的代表数量不允许我评论你的帖子,但如果你需要帮助,尽管问我。我觉得我的代码已经足够不言自明了,我迫切需要代表点哈哈......
猜你喜欢
  • 2019-05-22
  • 2012-09-26
  • 2013-05-20
  • 1970-01-01
  • 2010-09-06
  • 1970-01-01
  • 2021-11-21
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多