Image 使用散点图从图像重建圆

Image 使用散点图从图像重建圆,image,matlab,image-processing,coordinates,Image,Matlab,Image Processing,Coordinates,我有下图: 我使用了以下代码: X=imread('circle.png'); [I,J] = find(X ==0); scatter(I,J) 。。。获取二进制图像的坐标(circle.png)。我得到了坐标,但是当我在散点图上绘制这些坐标时,我得到了三个圆而不是一个。为什么会发生这种情况?图像很可能是RGB而不是二进制图像。这意味着您有一个三维矩阵,而不是二维矩阵,其中每个切片表示图像中像素的红色、绿色或蓝色分量 因此,如果您使用的是RGB图像,J坐标实际上将是列主坐标,如果您将其分割

我有下图:

我使用了以下代码:

X=imread('circle.png');
[I,J] = find(X ==0);
scatter(I,J)

。。。获取二进制图像的坐标(circle.png)。我得到了坐标,但是当我在散点图上绘制这些坐标时,我得到了三个圆而不是一个。为什么会发生这种情况?

图像很可能是RGB而不是二进制图像。这意味着您有一个三维矩阵,而不是二维矩阵,其中每个切片表示图像中像素的红色、绿色或蓝色分量

因此,如果您使用的是RGB图像,
J
坐标实际上将是列主坐标,如果您将其分割为第二个和第三个维度的组合。因此,因为您的图像是二进制的,所以只需提取任何一个通道,然后重试。对于二进制图像,在您的情况下,每个RGB元组将是
(0,0,0)
(255255)

因此,试着做:

X=imread('circle.png');
[I,J] = find(X(:,:,1) == 0); %// Change
scatter(I,J)
通过直接从StackOverflow读取图像:

X = imread('http://i.stack.imgur.com/RbOPG.png');
。。。我得到这个图像:


图像很可能是RGB而不是二进制图像。这意味着您有一个三维矩阵,而不是二维矩阵,其中每个切片表示图像中像素的红色、绿色或蓝色分量

因此,如果您使用的是RGB图像,
J
坐标实际上将是列主坐标,如果您将其分割为第二个和第三个维度的组合。因此,因为您的图像是二进制的,所以只需提取任何一个通道,然后重试。对于二进制图像,在您的情况下,每个RGB元组将是
(0,0,0)
(255255)

因此,试着做:

X=imread('circle.png');
[I,J] = find(X(:,:,1) == 0); %// Change
scatter(I,J)
通过直接从StackOverflow读取图像:

X = imread('http://i.stack.imgur.com/RbOPG.png');
。。。我得到这个图像:


看看
X的大小
…看看
X的大小
。。。