Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/matlab/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在MATLAB中扫描矩阵中特定点的图像_Matlab_Image Processing - Fatal编程技术网

在MATLAB中扫描矩阵中特定点的图像

在MATLAB中扫描矩阵中特定点的图像,matlab,image-processing,Matlab,Image Processing,我有一张480(高)乘640(宽)的图片。我还有一个大小为[1 x 280]的矩阵。这280个值是可以在图像中找到的点 我想从矩阵中找出哪些点可以在图像的特定部分找到。我做了一个嵌套的for循环来指定我要扫描的位置以搜索点,但是我在“扫描”时遇到了问题 它只显示W作为C的最大值,但我只需要显示高度在1到480之间,宽度在635到640之间的截面中C的最大值。如何编写只扫描我感兴趣的特定部分的代码,如果在该部分中找到了10个数字,如何选择它们 您可以使用和直接索引图像矩阵,以获得“是”或“不是”值

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

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

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

您可以使用和直接索引图像矩阵,以获得“是”或“不是”值的二进制矩阵

更新(将
vectorW
更改为
C
,添加对3通道图像的处理和实际点值返回):通过替换前两行,您可以在以下内容上应用自己的图像
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

通过这样做,在检查imageMember是什么之后,它是一个[1]的数组。对于vectorW,我将其声明为我的数组“C”,即vectorW=C;这如何使我能够找出数组C中的哪些点在边界内?1)在上面的
[480 x 6]
中,
imageMember
的大小应该与您正在检查的图像区域的大小相同,2)如果您得到
imageMember==[1]
这意味着您正在检查图像的6元素部分,其中的所有内容都是来自vectorW的一个点(可以是任意长度,因为它被视为一组或一组值)。您是否只在图像区域中查找值的存在,或者如果它们存在于
C
中,则查找它们的最大值?这在你的帖子里有点让人困惑。另外,代码中的
W
C
是什么
max()
是一个MATLAB操作符,除非您要覆盖它,即前面设置的
max=something
。如果是这样,双for循环将不起作用,
W
将等于
C
max
位置的值。请考虑修改和澄清。我正在寻找C的值的存在,我正在扫描这个特定的部分。C是一个[1 x 280]双数组。W只是我创建的一个数组,用于存储在节中找到的C值。C(最大值)可能是错误的。基本上这只是我对代码的想法,但我很确定这是错误的。我希望你能理解我试图得到的主要思想,那就是扫描for循环中分配的部分,查找数组“C”中的值。我的答案中的代码就是一个解决方案。部分中1的位置(名为
imageMember
)将为您提供可能值C的位置。然后您可以执行
W=imagePart(imageMember)
以获得这些特定值。你使用的是什么版本的MATLAB?当我使用W=imagePart(imageMember)时,我只得到一个1乘0的空矩阵。我正在使用Matlab7.10.0(R2010a)处理大小为480×640的图像,那么我是否将“imageC=randi(256480640)”替换为“imageC=(480640)?对于vectorW,我是否要将其替换为‘vectorW=C;’因为我的点数组存储在C中?
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 
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