我有二维图像数据,我想要计算相邻像素之间的绝对差值。每个像素有8个邻域(上、左、右和对角线),我需要将结果记录在一维向量中。
现在,我首先创建一个边缘对列表(i,j),其中i和j是像素位置的索引。例如,3x3图像中的像素被标记为1到9,这定义了i和j的范围,然后我遍历所有的边缘对来计算差值。问题是,这是非常缓慢的,因为有这么多的边缘在一个图像。
有更好的方法吗?非常感谢。
发布于 2013-12-01 07:44:36
你想记录一次还是两次差异?如果您计算每个像素的8个差异,那么您将记录每个差值两次:一次在i和j之间,一次在j和i之间(相同的abs差)。
这里有一个2D图像I的无循环选项
d1 = abs( I(:,1:end-1) - I(:,2:end) ); % difference left-right
d2 = abs( I(1:end-1,:) - I(2:end,:) ); % diff up
d3 = abs( I(1:end-1,1:end-1) - I(2:end,2:end) ); % 1st diagonal
d4 = abs( I(1:end-1,2:end) - I(2:end,1:end-1) ); % 1st diagonal
allDiff = [d1(:); d2(:); d3(:); d4(:) ]; % stack them together.发布于 2016-06-23 10:51:55
计算方法是如何使边缘像素与相应的水平像素之间的abs差值满足一个阈值,例如1,2,3…并且以同样的方式存储水平像素的值,也满足于水平相对和执行上述相同方法的要求。假设边缘像素I(i,j)然后I(i,j+r)水平像素和I(i,j-r)垂直像素
https://stackoverflow.com/questions/20309659
复制相似问题