1

我有一张尺寸为 480(高)乘 640(宽)的图像。我还有一个大小为 [1 x 280] 的矩阵。这 280 个值是可以在图像中找到的点。

我想找出可以在图像的特定部分中找到的矩阵中的哪些点。我做了一个嵌套for循环来指定我要扫描的位置以搜索点,但是我在“扫描”时遇到了麻烦。

% matrixC = [435 560 424 132 453 ........ 596] for example of size 280
for height = 1:480
    for width = 635:640
    W = C(max);
    end
end

这仅将 W 显示为 C 的最大值,但我只需要在 1 到 480 之间的高度和 635 到 640 的宽度之间显示 C 的最大值。如何编写代码以仅扫描我感兴趣的特定部分,如果在该部分中找到 10 个数字,我该如何选择它们?

4

1 回答 1

2

您可以在图像矩阵中使用ismember和直接索引来获取“is”或“is-not”值的二进制矩阵。

imageC = randi(256, 480, 640); % random image
vectorW = randi(256, 1, 280);  % random vector of points 

imagePart = imageC(1:480, 635:640); % select section by indexing
imageMember = ismember(imagePart, vectorW);  % check membership 

更新(更改vectorW为,添加对 3 通道图像的处理,以及实际点值返回):您可以通过替换前两行将 C自己的图像imageC和矢量应用于以下内容。C

imageC = randi(256, 480, 640, 3); % (random) image [480 x 640 x 3]
C = randi(256, 1, 280);  % (random) vector of points [1 x 280]

imagePart = imageC(1:480, 635:640, :); % select section by indexing [480 x 6 x 3]
imageMember = ismember(imagePart, C);  % check membership [480 x 6 x 3] 
pointsInImage = unique(imagePart(imageMember)); % unique set of points from C found in imagePart
于 2012-09-13T18:50:30.853 回答