图片分割问题

jeff994 2009-04-02 03:08:08
这是一张脑部的图片,中间的稍微亮一点的区域。有没有比较好的办法把分割出来? 
图片是一张512x512像素,可以下载。   
...全文
572 24 打赏 收藏 转发到动态 举报
写回复
用AI写文章
24 条回复
切换为时间正序
请发表友善的回复…
发表回复
zousir18 2011-07-08
  • 打赏
  • 举报
回复
牛人啊!
fandh 2009-04-14
  • 打赏
  • 举报
回复
最精确的方法是人工交互!
jeff994 2009-04-14
  • 打赏
  • 举报
回复
阀值,肯定是要的。
问题是怎么找到这个阀值?
还有怎么把中间的部分拿出来?

阀值怎么拿到80, 这个需要想想。
如果只是不停用不同的数值,然后用眼睛看结果。也就没有意义了

上面的结果这种可以把粘帖着边缘的部分拿掉。
然后就可以剩下中间的区域,还有一些其他的区域。然后,还得做第2次区分。
如果只是根据有多少个像素,还是比较麻烦。

如果能够解决怎么拿到阀值,算是基本上可以解决这个问题。

不过希望也有其他的思路。



lvgx_22 2009-04-14
  • 打赏
  • 举报
回复
基本思想就是,三层嵌套的连通区域之间的面积比例需要在一定范围内,每个连通区域的面积包括其中的孔洞面积.
下面是我模拟的算法步骤:
1.计算整个脑部的面积作为第一层连通区域面积
2.按阀值从小到大
3.计算第一层连通区域内的所有黑色孔洞的面积,如符合比例要求即保留(注意黑色孔洞的面积需包括其中的白色连通区域),
作为第二层连通区域面积
4.计算由3得到的黑色连同区域内部的所有白色连通区域面积,如果符合比例要求即保留(注意要点和3类似)
5.4步骤的结果即为最终结果

因为我还没有解决中间带孔的连通区域的面积计算方法和边界标定方法,所以具体的代码未能写出并模拟,楼主可以试下上面的方法
lvgx_22 2009-04-13
  • 打赏
  • 举报
回复
lvgx_22 2009-04-13
  • 打赏
  • 举报
回复
我觉得建立合适的阀值能解决这个问题啊,如下图所示是阀值为80的分割结果,
黑色小于80,白色大于80,从图中看,上半部分确实存在一个最大面积的独立连通区域,
所以对于不同的阀值,只要在合适的区域(图中人脑上半部),能够找到一个最大面积>xx的白色连通区域,
不就相当于找到了lz需要的区域?

jeff994 2009-04-13
  • 打赏
  • 举报
回复
建议大家尝试下。
假如某一区域灰度>i和 <i的点分别形成的聚类面积(二值化并做连通区域面积运算?)比最为接近,那么便能将区域分离?
这句话不是很明白。情具体点解释下。

注意噢,我并不是要把图片分成2个区域. 而是是要把中间的区域找出来。
如果只是简单的找阀值,有很多办法的,比如说kmeans, ktsu, fcm之类的。

lvgx_22 2009-04-13
  • 打赏
  • 举报
回复
从0-255,以每个灰度值i作为一个分割线,对整个图像进行分割,然后对<i和>i的所有像素点分别作聚类运算,假如某一区域灰度>i和<i的点分别形成的聚类面积(二值化并做连通区域面积运算?)比最为接近,那么便能将区域分离
黎大 2009-04-10
  • 打赏
  • 举报
回复
lz这个问题很有意思,我感觉边缘提取也还是会比阈值化好些
duduxia 2009-04-10
  • 打赏
  • 举报
回复
过来学习学习。不行直接截图算了。
jeff994 2009-04-06
  • 打赏
  • 举报
回复
给个例子,抛砖引玉。效果还是有点问题。
jeff994 2009-04-06
  • 打赏
  • 举报
回复
不好意思。周末没上来看。 
不是找大的图形(黑色包围的部分),而是找中间那个灰色区域中比较亮的那部分。
灰度值和周围部分差不多。没有明显的边缘。大概像素在30-50之间。 
但单纯的阈值是拿不出来的。会有很多干扰。
aaaa3105563 2009-04-04
  • 打赏
  • 举报
回复
学习········
leechrockgames 2009-04-03
  • 打赏
  • 举报
回复
访问像素可以解决吧.
瓶盒 2009-04-03
  • 打赏
  • 举报
回复
mark
Tinary3v0 2009-04-03
  • 打赏
  • 举报
回复
好多的错别字 郁闷 重新写一下:
上面这个图中的各个紫色点在检测后是已知的了 因为这些点本身就是我自己用代码画上去的
那个大椭圆就不要管了 是我自己程序里面要用到的
这些紫色的小点连接(直线就可以)起来 就应该能取出这个中间的图形了。
Tinary3v0 2009-04-03
  • 打赏
  • 举报
回复
楼主需要的恐怕是边缘检测 我稍微试了试: 效果如下:

上面这个图式提取边缘


上面这个图中的各个紫色点在检测是已知的 因为这些点本身就是我自己用代码画上去的
那个大椭圆就不要管了 是我自己程序里面要用到的
这些紫色的小点连接(直线就可以)起来 就应该能去除这个中间的图形了。


我用的是OpenCV:
具体可以参考:http://www.opencv.org.cn/index.php/%E8%BD%AE%E5%BB%93%28contour%29%E6%A3%80%E6%B5%8B2
里面的cvFindContours函数就是找到边缘提取后图像中的连续边缘的 而这个连续的边缘 又可以被提取成一个点序列 也就是上面那些紫色的点。
hemiya 2009-04-03
  • 打赏
  • 举报
回复
楼主的要求有点像ps的魔棒。
像6楼说的,取某个像素点的颜色值,自己定个允许的波动范围,和像素点连续相连的像素颜色值符合波动范围则这个点加入图像取值范围。
a,b,c三点。b和a连,c和b连.c,b都在相对a的波动范围都是。
a,b,c,d四点。如果d在相对a的波动范围,但是和a,b,c都不相连则d不是.
chiwa737 2009-04-03
  • 打赏
  • 举报
回复
我琢磨有个方法可能不错,
就是用户手动选择你需要区域得一个像素, 然后按照看附近得像素得变化率,过高就不增加感兴趣得区域,直到结束。 :)
chiwa737 2009-04-03
  • 打赏
  • 举报
回复
图像求导, 再按threshold提取可能能行

如果总是直线得画, 可以先求导然后按照huff变换也许能符合你要求。
加载更多回复(4)

19,468

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 图形处理/算法
社区管理员
  • 图形处理/算法社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧