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

2018-01-24 14:23:58 +08:00
 kangsgo

示例图片如下:

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

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

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

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

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

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

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

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

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

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

@angchouas 好的,我就是用这种方法做了,谢谢您~

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/425548

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX