查看: 1029|回复: 5|关注: 0

[已解决] 图片多个亮点中心坐标计算

[复制链接]

新手

13 麦片

财富积分


050


25

主题

214

帖子

0

最佳答案
本帖最后由 hoddescle 于 2019-1-12 22:53 编辑

目的 图片中有N个亮点,需要找到这N个亮点每个个的中心坐标(示例为6个)(附件图1)
目前思路:1  RGB转灰度
2 设置阈值,将小于阈值的像素设置为0,去掉噪音部分

3 找到当前最值(肯定是最高峰),通过计算中心矩,找到中心
4把当前的中心附近的像素设置成0
5重复以上过程,找到所有峰

目前在第三步,无法进行了,因为有两个峰的最高点一样,从右向左第二和第三个峰(附件图2)
用find 函数都堆在一起了

求:1 更好的思路
2解决两个峰的方法

本机条件
win 10 64位系统
版本2015a 64位


另附代码

  1. %%%读取数据
  2. y0=imread('1.jpg');
  3. y=y0;
  4. %%%%查看图片大小
  5. [a,b,c]=size(y);
  6. %%%如果是RGB类型数据,转化成灰度图
  7.     if c>0
  8.         y=rgb2gray(y);
  9.     end
  10. %%%%% 画出灰度图
  11. figure(1)
  12. imshow(y0)
  13. axis on

  14. %%%小于某个阈值的像素,变为0,把峰突出出来
  15. %%%计算方式 当像素值大于阈值,返回1,当小于返回0,得到取舍矩阵
  16. %%%原图片矩阵与取舍矩阵相乘,将小于阈值的像素变成0,大于阈值的保留原值
  17. y1=int8(y);%%% 得到一个同大小的矩阵
  18. y1=((sign(y1-70)+1)/2);%%%矩阵减去阈值,取符号,矩阵元素变为-1和1,矩阵+1,元素变为0和2,除以2,变为0和1
  19. y1=uint8(y1);%%%灰度图符号为8位无符号整形,将取舍矩阵的类型变为8位无符号整形
  20. y=y.*y1;%%%图象像素与取舍矩阵相乘,过滤掉背景值
  21. figure(2)
  22. surf(y)

  23. %%%%下面识别峰位与峰值
  24. tempmaxy=max(max(y))
  25. [X0,Y0]=find(y,tempmaxy)
复制代码


原始图象

原始图象

保留峰值

保留峰值

MATLAB 基础讨论
版块优秀回答者

中级

551 麦片

财富积分


5001500


72

主题

1441

帖子

104

最佳答案
  • 关注者: 71
发表于 2019-1-14 15:05:39 | 显示全部楼层 |此回复为最佳答案
你的图好像是7个点。
我的思路啊。
根据你程序中的y,可以判断出不是0的点。

如果你知道有几个亮点,可能通过聚类(kmeans),把每个亮点的坐标分开。
在同一个亮点的数据中,就可以找中心坐标了(聚类过程直接把这事儿就给作了)。

如果你认为一个亮点中值最高的点是中心,那两个最高值,无论哪个作为中心点,都没问题。

如果你不知道有几个亮点,就找那些可以自动判断类个数的聚类方法,完成上面的思路。
fig_clu.png

新手

13 麦片

财富积分


050


25

主题

214

帖子

0

最佳答案
 楼主| 发表于 2019-1-14 15:09:09 | 显示全部楼层
meatball1982 发表于 2019-1-14 15:05
你的图好像是7个点。
我的思路啊。
根据你程序中的y,可以判断出不是0的点。

还真是我听说过聚类,是分析距离的,我去搜相关资料,非常感谢

新手

13 麦片

财富积分


050


25

主题

214

帖子

0

最佳答案
 楼主| 发表于 2019-1-14 19:15:52 | 显示全部楼层
meatball1982 发表于 2019-1-14 15:05
你的图好像是7个点。
我的思路啊。
根据你程序中的y,可以判断出不是0的点。

我把图象转化成(x,y,灰度)的的坐标,然后聚类,亮点以内,三个坐标都很近,亮点之间灰度接近,但是位置坐标较远,这样就可以聚类了。
然后得到了二叉聚类树,比如分成7类,请问什么函数能显示7个分叉中每个叉有哪些点呢?

MATLAB 基础讨论
版块优秀回答者

中级

551 麦片

财富积分


5001500


72

主题

1441

帖子

104

最佳答案
  • 关注者: 71
发表于 2019-1-14 20:38:09 | 显示全部楼层
hoddescle 发表于 2019-1-14 19:15
我把图象转化成(x,y,灰度)的的坐标,然后聚类,亮点以内,三个坐标都很近,亮点之间灰度接近,但是位 ...

我不知道你是用哪个函数 实现的聚类,一般情况下,聚类的输出里,会给出各个点是属于哪一类的index,我是通过 这个index来判断的,你可以仔细 看看你用的函数的帮助,不一定是默认的输出,可能有许多输出 的选项,应该 是有点是哪 一类的描述。

新手

13 麦片

财富积分


050


25

主题

214

帖子

0

最佳答案
 楼主| 发表于 2019-1-15 08:24:48 | 显示全部楼层
meatball1982 发表于 2019-1-14 20:38
我不知道你是用哪个函数 实现的聚类,一般情况下,聚类的输出里,会给出各个点是属于哪一类的index,我是 ...

好,我去help 里面查找。谢谢:handshake
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

站长推荐上一条 /2 下一条

快速回复 返回顶部 返回列表