从灰度照片

时间:2016-04-27 22:19:06

标签: matlab coordinates

您好我正在尝试从灰度照片中提取x,y坐标(example.jpg)。 gray scale photo

我将点(带红点)标记在我想要的x,y坐标(example1.jpg)dot points for coordinates

然后我用下面的代码

提取红点区域
A=imread('example.jpg');
B=imread('example1.jpg');
Size=size(A)
C=zeros(Size);
for j=1:Size(2)
    for i=1:Size(1)
           if A(i,j)==B(i,j);
            C(i,j)=1;
        else C(i,j)=255;
        end
    end
end
K=mat2gray(C);
imshow(K)

通过这样做,我可以提取点(我感兴趣)并得到下面的图像,但点数大于我在照片中的真实标记(dots.png)。并且它没有捕获所有点(10个点中的8个)

extracted dot points

然后,为了得到这些点的x,y坐标,我使用下面的代码:

 X=imread('dots.png');
 [I,J] = find(X(:,:,1) == 255); %// Change
 scatter(I,J)

然后我根据I,J和图片获得x和y坐标,以便检查坐标是否显示照片中的正确位置。

counter check dot points

但这是我需要解决的问题:

1)如何获得图3中较小的点数(因为灰色照片中的点I标记很小,但是当它在图3中生成时,它变得更大。因此,当我提取x,y时坐标(就I,J而言),我得到了一个点的多个x和y,因为每个点都很大。相反,我希望每个点得到一个x和一个y。

2)如何拍摄我标记的所有点

3)当你看图3和图4时,图3显示了南瓜的真实方向,但在图4中,它是旋转的。这是怎么发生的,我该如何纠正呢?

4)我认为这种提取方法比我的方法更容易。你能建议吗? 谢谢

2 个答案:

答案 0 :(得分:0)

这是一个更完整的例子,为了回答:

I = imread('cameraman.tif');
figure, imshow(I)
[y, x] = ginput(5); % This chooses the five points interactively.

close 
color = I; % making a RGB color version of the image.
color(:,:,2) = I;
color(:,:,3) = I;

for idx = 1:numel(x)
% Change the color of the points to red one by one.
    xpoint = x(idx);
    ypoint = y(idx);
    color(xpoint, ypoint, 1) = 255;
    color(xpoint, ypoint, 2) = 0;
    color(xpoint, ypoint, 3) = 0;    
end

figure, 
imshow(color) % display the colored dot image.

这应该以交互方式选择图像中的五个点,然后将这些点着色为红色。

答案 1 :(得分:0)

就blob而言,我建议您使用压缩文件格式使用红点保存图像。

blob似乎是24x24 macroblocks - 不确定压缩算法使用的是什么(不是jpeg)......

这是一个近距离接触:

enter image description here

无论如何,一个简单的方法来查看它发生的原因是在A(i,j)!= B(i,j)时列出A(i,j)和B(i,j)的值 - a您可以自己完成的基本错误查找过程。