我试图在matlab中编写一个函数,它将返回一个大小为MS =长度x-分辨率的图像,在原始图像中以像素为单位,NS= y-分辨率长度在原始图像中,使用最近邻公式。
我遇到了一个例外情况,很难找到一个解决方案。我想我需要另一张有条件的支票。目前,对于我的映像,它正在尝试访问d(1309,27),但是它不应该访问该值,因为它是在for循环:for ms = 1:M中有界的M和N
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发布于 2014-09-08 17:28:16
我想你最近的邻居调整大小是不合适的。如果要缩放,则应该使用调整大小的函数来简化您的生活。如果不是缩放,则应使用以下代码为索引创建一个查找表。
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的回复。
编辑:用行空间函数代替interp1函数
https://stackoverflow.com/questions/25729069
复制相似问题