Image 遮罩下矩阵/图像的有效值

Image 遮罩下矩阵/图像的有效值,image,matlab,mask,Image,Matlab,Mask,假设我想在给定掩码(例如,5x5掩码)下在Matlab中提取图像或矩阵中的值,但我只想提取现有值,因为在边框(或其附近)中,掩码不会找到所有值。我只想提取给定此遮罩的图像的有效值,无论迭代哪个像素。如何在Matlab中实现这一点 您只需应用max和min计算x和y索引,以避免超出图像边界: img = magic(7); %// define example image Nx = 5; %// block size in x Ny = 5; %// block size in y x = 2;

假设我想在给定掩码(例如,5x5掩码)下在Matlab中提取图像或矩阵中的值,但我只想提取现有值,因为在边框(或其附近)中,掩码不会找到所有值。我只想提取给定此遮罩的图像的有效值,无论迭代哪个像素。如何在Matlab中实现这一点

您只需应用
max
min
计算x和y索引,以避免超出图像边界:

img = magic(7); %// define example image
Nx = 5; %// block size in x
Ny = 5; %// block size in y
x = 2; %// pixel x
y = 6; %// pixel y

nx = (Nx-1)/2;
ny = (Ny-1)/2;
xx = max(x-nx,1):min(x+nx,size(img,1));
yy = max(y-ny,1):min(y+ny,size(img,2));
block = img(xx, yy);
示例结果:

>> img
img =
    30    39    48     1    10    19    28
    38    47     7     9    18    27    29
    46     6     8    17    26    35    37
     5    14    16    25    34    36    45
    13    15    24    33    42    44     4
    21    23    32    41    43     3    12
    22    31    40    49     2    11    20

>> block
block =
     1    10    19    28
     9    18    27    29
    17    26    35    37
    25    34    36    45

如果您有图像处理工具箱,则可以使用函数
blockproc
定义您自己的基于邻域的操作

M=5; N=5;
fun = @(block_struct) block_struct.data;
B = blockproc(I,[M N],fun, 'TrimBorder', 1);
其中
I
是您的图像(矩阵)。然后将
fun
更改为您需要的任何内容。
TrimBorder
参数应能处理边界问题


希望有帮助

如果您靠近边界,则值的数量将小于25,并且不能排列在数组中。你想要什么样的?简单地作为一个向量,没有特定的顺序?是的。这些值可以类似于向量。不管顺序如何。我只需要nxn掩码中的现有/有效值。感谢您的回复。一种方法是执行NXNIF语句并向向量提供值。但是它非常耗时,我将使用3种遮罩尺寸:-(当你说提取值时,你想要遮罩中像素的平均值吗?或者你只想要原始像素值的子集(裁剪)@Jigg我想要遮罩中的像素(裁剪),如果我处理边界像素,我只需要此遮罩内的有效像素。我将尝试您的建议并向您提供反馈。谢谢。问题是“TrimBorder”参数,它会修剪边界像素。我需要边界像素,但只需要遮罩内的有效像素。谢谢。