【发布时间】:2015-03-01 13:49:17
【问题描述】:
我正在为在图像D中找到给定像素x的邻居的任务编程,可以公式为:
公式表示像素y与像素x的距离为1,则它们是像素x的邻居。这是我的matlab代码。但是,仍然需要很长时间才能找到。你能建议一种更快的方法吗?非常感谢
%-- Find the neighborhood of one pixel
% x is pixel coordinate
% nrow, ncol is size of image
function N = find_neighbor(x,nrow,ncol)
i = x(1);
j = x(2);
I1 = i+1;
if (I1 > nrow)
I1 = nrow;
end
I2 = i-1;
if (I2 < 1)
I2 = 1;
end
J1 = j+1;
if (J1 > ncol)
J1 = ncol;
end
J2 = j-1;
if (J2 < 1)
J2 = 1;
end
N = [I1, I2, i, i; j, j, J1, J2];
例如:ncol=128; nrow=128; x =[30;110] 然后输出
N =31 29 30 30; 110 110 111 109]
用于循环调用函数
x=[30 31 32 33; 110 123 122 124]
for i=1:length(x)
N = find_neighbor(x(:,i),nrow,ncol);
end
【问题讨论】:
-
如果您在一些嵌套循环中使用此函数,那么摆脱这些循环以加快执行速度可能更有意义。
-
对。我在循环中使用了它,实际上,它会调用该函数大约 4000 次。是否可以减少计算时间?
-
那些函数调用可能会破坏那里的性能。向我们展示那些嵌套循环的代码?
-
@请告诉我们你在用这些像素做什么。
conv2或blockproc可能是正确的选择。 -
@Divakar:让我们看看我的更新。 Daniel:conv2 适用于整个图像。但是,我的任务仅适用于图像中的几个像素。该像素是预先选择的。
标签: matlab image-processing optimization matrix