我需要找到二进制图像的x和y坐标。这是代码的示例图片(方形)
And use the codes as below:
a=imread('square.png');
b=im2bw(a);
figure(1)
imshow(b) %%show image in normal axis
sz=size(b);
RI=imref2d(size(b));
xmin=-sz(2)/2;
xmax=sz(2)/2;
ymin=-sz(1)/2;
ymax=sz(1)/2;
RI.XWorldLimits=[xmin xmax];
RI.YWorldLimits=[ymin ymax];
figure(2) %%show image is desired axes where zero is centered of axes
imshow(b,RI);
[x,y]=find(b==0);
figure(3)
scatter(x,y)
图(1)是原始图像。图(2)是相同的图像,但是在不同的轴上示出(即,零以x和y轴为中心)。然后我寻找感兴趣区域的x和y坐标(在这个例子中,方框)。但是我得到的x和y坐标与图(2)中的轴不一致。根据图(2),方形的x和y坐标应该是-ve值和+ ve值。但是所有x和y坐标都是+ ve值。我看是什么问题然后我注意到[x,y]=find(b==0)
的x和y值与它们在矩阵中的位置一致,而不是轴坐标。那么,如果我想在轴坐标中显示x和y,我该怎么办?韩国社交协会。
答案 0 :(得分:0)
首先,您将use strict;
use warnings;
# ^- start always your code like this to see errors and what is ambiguous
# declare your variables using "my" to specify the scope
my $filename = 'seq-at.txt';
# use the 3 parameters open syntax to avoid to overwrite the file:
open my $fh, '<', $filename or die "unable to open '$filename' $!";
my %hash;
my $hkey = '';
my $hval = '';
while (<$fh>) {
chomp; # remove the newline \n (or \r\n)
if (/^>/) { # when the line start with ">"
# store the key/value in the hash if the key isn't empty
# (the key is empty when the first ">" is encountered)
$hash{$hkey} = $hval if ($hkey);
# store the line in $hval and clear $hkey
($hval, $hkey) = $_;
} elsif (/\S/) { # when the line isn't empty (or blank)
# append the line to the key
$hkey .= $_;
}
}
# store the last key/val in the hash if any
$hash{$hkey} = $hval if ($hkey);
# display the hash
foreach (keys %hash) {
print "key: $_\nvalue: $hash{$_}\n\n";
}
的输出反转。它会返回您编写的行而不是 find
和x
的行和列。因此,您实际上应该将输出指定为y
。
[y,x]
然后,您还要确保展开散点图轴的y方向(使用[y,x] = find(b == 0);
),因为这是axis image
(您的其他数字)默认使用的内容。
imshow
<强>更新强>
如果您想将这些坐标转换为您显示的居中坐标,则需要在调用散点图之前将相同的变换应用于scatter(x,y)
axis image
和x
。
y