假设edge
是图像边缘检测功能的输出。我需要您的帮助才能理解原因 - 当我使用size(...)
检查img(te1, te2)
的尺寸时,我获得的尺寸大于输入图像(1467 1467)
的尺寸(128 128)
。当我(128 128
size(img(te1, te2))
}
情况如下:
img = imread('LENNA128.bmp'); %% input image
edgemap = double(255-edge);
[te1,te2] = find(edgemap==255);
img(te1,te2)= 125;
imshow(uint8(img(te1,te2)))
imshow(uint8(edgemap))
size(img(te1,te2))
size(edgemap)
非常感谢您的回复。
答案 0 :(得分:2)
yyyy-MM-dd'T'HH:mm:ss.SSSZZ
函数返回两个对应于列和行的向量find
和te1
。让我们看一个小例子:
te2
将返回
x = [ 1, 2, 3 ;
3, 1, 2 ;
2, 3, 1 ]
[row,col] = find(x==3)
即。在row = [2; 3; 1];
col = [1; 2; 3];
,(2,1)
和(3,2)
有三个,这确实是正确的。您要做的下一步是索引,返回
(1,3)
这绝对不是你想要的。原因是,MATLAB将其解释为:"取第2行,然后是第1行,然后是第3行,并且对于每一行:取col 1,然后是col 2,然后是col 3。"这就是它的回报:
x(row,col)
ans =
3 1 2
2 3 1
1 2 3
要获得您需要的确切元素,您可以例如使用sub2ind
函数创建指定ans =
second row of x
first row of x
third row of x
对的linear index:
(row,column)
因此x(sub2ind(size(x),row,col)) = 4
x =
1 2 4
4 1 2
2 4 1
的所有出现都被3
取代。
4
与3与x
进行比较。这将返回一个逻辑数组,其中x==3
处于1
,其中x
为3:
x==3
ans =
0 0 1
1 0 0
0 1 0
您可以使用它来索引x
:
x(x==3) = 4
x =
1 2 4
4 1 2
2 4 1
您可以这样做:将edgemap
与255进行比较,然后使用它来索引图像:
img(edgemap==255) = 125;