如何在matlab中屏蔽部分图像?

时间:2010-05-15 21:50:41

标签: matlab image-processing mask

我想知道如何屏蔽BLACK&中的部分图像。白色?

我得到了一个需要边缘检测到的物体,但是我在背景中有其他白色干扰物体在目标物体下方...我想将图像的整个下半部分掩盖为黑色,怎么能我这样做?

谢谢!

修改

我也想屏蔽其他一些部分(上半部分)...我该怎么做?

请解释一下代码,因为我真的想知道它是如何工作的,并按照我自己的理解来实现它。

EDIT2

我的图片是480x640 ......有没有办法屏蔽特定的像素?例如图像中的180x440 ......

2 个答案:

答案 0 :(得分:6)

如果您在A矩阵中存储了2-D grayscale intensity image,则可以通过执行以下操作将下半部分设置为黑色:

centerIndex = round(size(A,1)/2);         %# Get the center index for the rows
A(centerIndex:end,:) = cast(0,class(A));  %# Set the lower half to the value
                                          %#   0 (of the same type as A)

首先使用函数SIZE获取A中的行数,然后将其除以2,然后将其四舍五入以获得靠近图像高度中心的整数索引。然后,向量centerIndex:end将所有行从中心索引索引到末尾,:索引所有列。所有这些索引元素都设置为0以表示黑色。

函数CLASS用于获取A的数据类型,以便可以使用函数CAST将0转换为该类型。但是,这可能不是必需的,因为0可能会在没有它们的情况下自动转换为A的类型。

如果要创建logical index作为掩码,可以执行以下操作:

mask = true(size(A));  %# Create a matrix of true values the same size as A
centerIndex = round(size(A,1)/2);  %# Get the center index for the rows
mask(centerIndex:end,:) = false;   %# Set the lower half to false

现在,mask是一个逻辑矩阵,其中true(即“1”)表示您要保留的像素,false(即“0”)表示您要设置的像素您可以根据需要将mask的更多元素设置为false。然后,当您想要应用蒙版时,您可以执行以下操作:

A(~mask) = 0;  %# Set all elements in A corresponding
               %#   to false values in mask to 0

答案 1 :(得分:0)

function masked = maskout(src,mask)
    % mask: binary, same size as src, but does not have to be same data type (int vs logical)
    % src: rgb or gray image
    masked = bsxfun(@times, src, cast(mask,class(src)));
end