主题:如何获取坐标
lily婕
[专家分:40] 发布于 2008-10-13 11:15:00
例如一幅图象中有20个黑点,如何获得这些点的坐标呢?
请高手指点
回复列表 (共8个回复)
沙发
永恒的回忆 [专家分:810] 发布于 2008-10-13 12:49:00
直接对图像矩阵检测值为零的点。或在firgure窗口里直接用data cursor工具点出黑点,也可以知道其坐标
板凳
lily婕 [专家分:40] 发布于 2008-10-14 09:22:00
那如何直接对图像矩阵检测值为零的点呢?如果点的颜色不一样,例如有红点,绿点,黑点这样呢?
用data cursor工具的话,在点很多的情况下就不方便了
3 楼
永恒的回忆 [专家分:810] 发布于 2008-10-15 00:00:00
我想你要找的点一定有它的自己的特点吧,只是不知道它的坐标而已。要找的点有不同的颜色,那么就通过搜查矩阵中具有这些点对应的值的元素那不就成了。
比如找红点,和黑点
[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 楼
lily婕 [专家分:40] 发布于 2008-10-16 09:30:00
真是谢谢啦
5 楼
lily婕 [专家分:40] 发布于 2008-10-16 11:56:00
我用以下的程序完成了对一幅图象的找点
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 楼
永恒的回忆 [专家分:810] 发布于 2008-10-16 18:42:00
“但是我现在要处理多幅图象,例如有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 楼
lily婕 [专家分:40] 发布于 2008-10-17 09:34:00
很谢谢你,可是我没学过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 楼
lily婕 [专家分:40] 发布于 2008-10-17 14:20:00
我改好了,用这两句来弄
[xr,yr]=find(a(:,:,1)==255 & a(:,:,2)==0 & a(:,:,3)==0); %找红点坐标
rr{i}=[xr,yr];
我来回复