Arrays 如何测试靠近图像边框的点并使其无效?
我有3d图像中几个感兴趣点的索引Arrays 如何测试靠近图像边框的点并使其无效?,arrays,matlab,image-processing,Arrays,Matlab,Image Processing,我有3d图像中几个感兴趣点的索引 PIdx=[8648586686786886987087187287387420682079327] 我将在每个点执行某些操作,其中一个操作将涉及从这些点查找东、西、北、南、顶部和底部方向 但是,此操作导致错误“下标索引必须是实正整数或逻辑”,我意识到这是因为一些PIdx靠近图像的边界,在这种情况下,查找一个或多个指定方向将导致负索引 为了解决这个问题,我试图使任何靠近边界的PIdx无效。 “edgeVectors”是一个70644x3单元阵列,从中获取索引PI
PIdx=[8648586686786886987087187287387420682079327]代码>
我将在每个点执行某些操作,其中一个操作将涉及从这些点查找东、西、北、南、顶部和底部方向
但是,此操作导致错误“下标索引必须是实正整数或逻辑”,我意识到这是因为一些PIdx
靠近图像的边界,在这种情况下,查找一个或多个指定方向将导致负索引
为了解决这个问题,我试图使任何靠近边界的PIdx
无效。
“edgeVectors”是一个70644x3单元阵列
,从中获取索引PIdx
。“edgeVectors”
中的PIdx
对应元素为:
edgeVectors = ['A-' NaN NaN NaN NaN 'B+'
'A-' NaN NaN NaN NaN 'B+'
'A-' NaN NaN NaN NaN 'B+'
'A-' NaN NaN NaN NaN 'B+'
'A-' NaN NaN NaN NaN 'B+'
'A-' NaN NaN NaN NaN 'B+'
'A-' NaN NaN NaN NaN 'B+'
'A-' NaN NaN NaN NaN 'B+'
'A-' NaN NaN NaN NaN 'B+'
'A-' NaN NaN NaN NaN 'B+'
'A-' NaN NaN NaN NaN 'B+'
'A-' NaN NaN 'B+' NaN NaN
'B+' NaN 'A+' NaN NaN NaN
'B-' NaN NaN NaN NaN 'A+'];
寻找方向的方程式如下所示:
North = PIdx + nx;
South = PIdx – nx;
East = Pidx + 1;
West = PIdx – 1;
Top = PIdx + ( ny*(2*nx - 1) - nx + (nx*ny) );
Bottom = Pidx - ( ny*(2*nx - 1) - nx + (nx*ny) );
其中:
nx = ImagesizeX-1;
ny = ImagesizeY-1;
nx=29; ny=29
要在边界处测试底部方向,例如,我有:
for ii = 1: numel(PIdx)
if sign( PIdx(ii,:) - ( ny*(2*nx - 1) - nx + (nx*ny) ) ) == -1
edgeVectors(ii, :) = {NaN}; %invalidate PIdx
end
end
对于PIdx(1)
底部=864–2465=-1601
符号(-1601)=-1
因此,我希望上面的代码能够返回
edgeVectors = NaN NaN NaN NaN NaN NaN
然而,这并没有发生
你知道我错在哪里吗?或者,对于如何实现这一目标,是否有任何建议/参考?非常感谢。我没有阅读所有这些内容,但是如果您想检查PIdx
所指的像素是否接近边框,您只需要检查ind2sub(大小(图像),PIdx(I))的元素是否接近边框
要么接近0,要么接近图像的宽度/高度。一种更简单的方法是使用包含不会影响计算的值的新边框填充图像。谢谢大家的建议。我想我知道该怎么走了。我所做的是相对于分辨率增加图像的大小。请注意,我处理的是合成图像,因此对于真实图像,这将意味着@bicker建议的填充。我没有阅读所有内容,但如果您想检查PIdx
所指的像素是否接近边框,您只需要检查ind2sub(大小(图像),PIdx(i))的元素是否接近边框
要么接近0,要么接近图像的宽度/高度。一种更简单的方法是使用包含不会影响计算的值的新边框填充图像。谢谢大家的建议。我想我知道该怎么走了。我所做的是相对于分辨率增加图像的大小。请注意,我处理的是合成图像,因此对于真实图像,这将意味着@bicker建议的填充。