Arrays 如何测试靠近图像边框的点并使其无效?

Arrays 如何测试靠近图像边框的点并使其无效?,arrays,matlab,image-processing,Arrays,Matlab,Image Processing,我有3d图像中几个感兴趣点的索引 PIdx=[8648586686786886987087187287387420682079327] 我将在每个点执行某些操作,其中一个操作将涉及从这些点查找东、西、北、南、顶部和底部方向 但是,此操作导致错误“下标索引必须是实正整数或逻辑”,我意识到这是因为一些PIdx靠近图像的边界,在这种情况下,查找一个或多个指定方向将导致负索引 为了解决这个问题,我试图使任何靠近边界的PIdx无效。 “edgeVectors”是一个70644x3单元阵列,从中获取索引PI

我有3d图像中几个感兴趣点的索引

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建议的填充。