V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
推荐学习书目
Learn Python the Hard Way
Python Sites
PyPI - Python Package Index
http://diveintopython.org/toc/index.html
Pocoo
值得关注的项目
PyPy
Celery
Jinja2
Read the Docs
gevent
pyenv
virtualenv
Stackless Python
Beautiful Soup
结巴中文分词
Green Unicorn
Sentry
Shovel
Pyflakes
pytest
Python 编程
pep8 Checker
Styles
PEP 8
Google Python Style Guide
Code Style from The Hitchhiker's Guide
kangsgo
V2EX  ›  Python

请问一下计算图片中的物体长宽有什么好的思路么

  •  
  •   kangsgo · 2018-01-24 14:23:58 +08:00 · 4126 次点击
    这是一个创建于 2500 天前的主题,其中的信息可能已经有所发展或是发生改变。

    示例图片如下:

    我想计算大肠杆菌的长宽(图片有像素和尺寸换算比例),有什么好的思路么。 我用mahotas只能算周长。

    现在知道的一个笨方法就是用ImageJ进行一个一个计算,但是有上千个,感觉压力好大。所以想请问一下有什么好的思路或者模块可以实现么,谢谢~

    图片(防止上面的不显示) https://static.independent.co.uk/s3fs-public/styles/article_small/public/thumbnails/image/2016/05/26/19/pg-12-superbugs-getty.jpg

    15 条回复    2018-01-27 15:40:55 +08:00
    Hzzone
        1
    Hzzone  
       2018-01-24 14:37:39 +08:00
    ImageJ 是手工算的吗?
    可以试一下:
    取个阈值把细菌给分割出来,然后长宽就大致取个内切和外接圆的直径...
    Hzzone
        2
    Hzzone  
       2018-01-24 14:38:40 +08:00   ❤️ 1
    这样一次就能做完,但是准确多不敢保证..你可以把效果图用 matplotlib 或者 opencv 画出来看一下
    northisland
        3
    northisland  
       2018-01-24 15:02:51 +08:00   ❤️ 1
    ppm
    shuianfendi6
        4
    shuianfendi6  
       2018-01-24 15:17:26 +08:00   ❤️ 1
    不懂计算机图形学

    分离红色通道,然后边缘特征提取
    kangsgo
        5
    kangsgo  
    OP
       2018-01-24 16:02:52 +08:00
    @Hzzone 是的,ImageJ 要手工操作。好的,谢谢,我试一下
    @northisland ppm 这个 python 包我看好像是转格式的?
    @shuianfendi6 边缘提取以后好操作计算么?
    Kilerd
        6
    Kilerd  
       2018-01-24 16:38:20 +08:00
    灰度化,然后找跟目的颜色 +- xx 的像素点不行吗?
    kangsgo
        7
    kangsgo  
    OP
       2018-01-24 16:43:19 +08:00
    @Kilerd 可以,但是这个只是画出轮廓,现在关键步数就是不知道怎么计算到长宽···
    shuianfendi6
        8
    shuianfendi6  
       2018-01-24 16:44:38 +08:00
    @kangsgo 边缘提取分割出子区域,长宽有明显分界线算子像素距离就好了,或者直接数灰度超过多少的像素面积,用长度或者宽度反求,异常的图片保存下来人工处理呗
    至少这个图红色通道特征还是蛮明显的,边缘特征感觉用阈值就可以了
    MinQ
        9
    MinQ  
       2018-01-24 16:48:50 +08:00
    @kangsgo 最小包围矩形,MinAreaRect,把每个大肠杆菌的轮廓带进去就行了
    northisland
        10
    northisland  
       2018-01-24 17:55:32 +08:00 via iPhone
    @kangsgo pixel per square meter

    每平米像素数量
    xuchkang171
        11
    xuchkang171  
       2018-01-24 21:33:23 +08:00
    试试 Halcon?

    很久前用其他语言调 Halcon 做过类似的事情。
    kangsgo
        12
    kangsgo  
    OP
       2018-01-25 12:13:59 +08:00
    @xuchkang171
    @northisland
    @MinQ
    @shuianfendi6
    好的,非常感谢
    ChenJinluo
        13
    ChenJinluo  
       2018-01-25 23:40:03 +08:00   ❤️ 1
    老哥你是学生物的?
    angchouas
        14
    angchouas  
       2018-01-26 21:55:01 +08:00   ❤️ 1
    如果你会用 python 的话,我推荐你一个方法,主要使用一个叫 skimage 的包。

    先把图片滤波,把噪声去掉。

    然后把边缘提取出来,删掉不完整的。Label 之后再 regionprops,得到边缘的坐标和质心坐标。

    距离质心最长的就是半长轴,最短的就是半短轴,翻倍之后就是长和宽。
    kangsgo
        15
    kangsgo  
    OP
       2018-01-27 15:40:55 +08:00
    @ChenJinluo 嗯嗯,是的

    @angchouas 好的,我就是用这种方法做了,谢谢您~
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1174 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 81ms · UTC 18:50 · PVG 02:50 · LAX 10:50 · JFK 13:50
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.