回 帖 发 新 帖 刷新版面

主题:如何获取坐标

例如一幅图象中有20个黑点,如何获得这些点的坐标呢?
请高手指点

回复列表 (共8个回复)

沙发

直接对图像矩阵检测值为零的点。或在firgure窗口里直接用data cursor工具点出黑点,也可以知道其坐标

板凳


那如何直接对图像矩阵检测值为零的点呢?如果点的颜色不一样,例如有红点,绿点,黑点这样呢?
用data cursor工具的话,在点很多的情况下就不方便了

3 楼

我想你要找的点一定有它的自己的特点吧,只是不知道它的坐标而已。要找的点有不同的颜色,那么就通过搜查矩阵中具有这些点对应的值的元素那不就成了。
比如找红点,和黑点
[xr,yr]=find(a(:,:,1)==255 & a(:,:,2)==0 & a(:,:,3)==0);  %找红点坐标
[xk,yk]=find(a(:,:,1)==0 & a(:,:,2)==0 & a(:,:,3)==0);    %找黑点坐标

如果说你要的颜色是模糊的,比如说红色,不一定是指rgb值为(255,0,0),而是在这附近就可以了,这样可以给个范围给它就行,比如
find(a(:,:,1)<=255 & a(:,:,1)>=230 & a(:,:,2)>=0 & a(:,:,2)<=20 & a(:,:,3)>=0 & ...       a(:,:,3)<=20);

4 楼


真是谢谢啦

5 楼


我用以下的程序完成了对一幅图象的找点
a=imread('f2.bmp');
[yr,xr]=find(a(:,:,1)==255 & a(:,:,2)==0 & a(:,:,3)==0);  %找红点坐标
[yk,xk]=find(a(:,:,1)==0 & a(:,:,2)==0 & a(:,:,3)==0);    %找黑点坐标
[yb,xb]=find(a(:,:,1)==0 & a(:,:,2)==0 & a(:,:,3)==255);    %找兰点坐标
[yz,xz]=find(a(:,:,1)==128 & a(:,:,2)==0 & a(:,:,3)==255);    %找紫点坐标
r=[xr,yr];%显示红点坐标
k=[xk,yk];%显示黑点坐标
b=[xb,yb];%显示兰点坐标
z=[xz,yz]%显示紫点坐标
但是我现在要处理多幅图象,例如有3张图f1.bmp,f2.bmp,f3.bmp,都做相同的处理,我希望将结果分别存在r(i),k(i),b(i),z(i),i=1,2,3中.  我用循环来做,可是只得到了第三组数据,请问要如何做?

6 楼

“但是我现在要处理多幅图象,例如有3张图f1.bmp,f2.bmp,f3.bmp,都做相同的处理,我希望将结果分别存在r(i),k(i),b(i),z(i),i=1,2,3中.  我用循环来做,可是只得到了第三组数据,请问要如何做?”
     这是因为你每次循环,都把原来的r(i),k(i),b(i),z(i)覆盖,所以只有第三组数据

   对于处理多张图片,我建议使用单元结构(相当于c++里的广义表),这样就可以方便存储多张图片的矩阵,而避开使用不同矩阵变量名带来的不便,(如果真的非用矩阵不可,那只好使用eval命令了)。同样把不同图片的某颜色的坐标也存在一个单元结构里,这样操作方便,同时也容易辨认是哪张图片的点。

7 楼

    很谢谢你,可是我没学过C++,对单元结构不是很了解
    我学习了一下,我把原来程序里的找红点坐标的改为
 rr{i}=find(a(:,:,1)==255 & a(:,:,2)==0 & a(:,:,3)==0);
    可是用这个单元结构得到的数据好象不是坐标,和原来 
[xr,yr]=find(a(:,:,1)==255 & a(:,:,2)==0 & a(:,:,3)==0);得到的不一样,
   例如原来得到一组坐标值为255,85  但是现在得到的变为101685,这是为什么呢?要怎么改呢?

8 楼

我改好了,用这两句来弄
[xr,yr]=find(a(:,:,1)==255 & a(:,:,2)==0 & a(:,:,3)==0);    %找红点坐标
rr{i}=[xr,yr];

我来回复

您尚未登录,请登录后再回复。点此登录或注册