Image 遮罩下矩阵/图像的有效值
假设我想在给定掩码(例如,5x5掩码)下在Matlab中提取图像或矩阵中的值,但我只想提取现有值,因为在边框(或其附近)中,掩码不会找到所有值。我只想提取给定此遮罩的图像的有效值,无论迭代哪个像素。如何在Matlab中实现这一点 您只需应用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;
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”参数,它会修剪边界像素。我需要边界像素,但只需要遮罩内的有效像素。谢谢。