社区所有版块导航
Python
python开源   Django   Python   DjangoApp   pycharm  
DATA
docker   Elasticsearch  
aigc
aigc   chatgpt  
WEB开发
linux   MongoDB   Redis   DATABASE   NGINX   其他Web框架   web工具   zookeeper   tornado   NoSql   Bootstrap   js   peewee   Git   bottle   IE   MQ   Jquery  
机器学习
机器学习算法  
Python88.com
反馈   公告   社区推广  
产品
短视频  
印度
印度  
Py学习  »  Python

df中像素的复杂形状的平均直径,Python

fred • 3 年前 • 1322 次点击  

我有一个由多个粒子组成的数据框,它们得到了如下的组号(1,2,3,4):

Groups: 
 [[0 0 0 1 1 1 0 0]
 [0 2 0 1 1 1 0 0]
 [0 0 0 1 1 1 0 0]
 [0 0 0 0 1 0 0 0]
 [0 3 3 0 0 4 0 0]
 [0 3 0 0 0 4 0 0]
 [0 0 0 0 0 4 0 0]
 [0 0 0 0 0 4 0 0]]
Number of particles: 4

然后,我计算了粒子的面积,并创建了一个数据帧(假设1像素=1纳米):

   Particle #  Size [pixel #]  A [nm2]  
1           1              10       10     
2           2               1        1     
3           3               3        3     
4           4               4        4     

现在我想计算粒子的直径。然而,粒子的形状是复杂的,因此我正在寻找一种方法来计算平均直径(考虑到形状不是完美的圆形),并在[nm2]旁边添加另一个具有平均直径的列。

这可能吗?

以下是我的完整代码:

import numpy as np
from skimage import measure
import pandas as pd

final = [
    [0, 0, 0, 255, 255, 255, 0, 0],
    [0, 255, 0, 255, 255, 255, 0, 0],
    [0, 0, 0, 255, 255, 255, 0, 0, ],
    [0, 0, 0, 0, 255, 0, 0, 0],
    [0, 255, 255, 0, 0, 255, 0, 0],
    [0, 255, 0, 0, 0, 255, 0, 0],
    [0, 0, 0, 0, 0, 255, 0, 0],
    [0, 0, 0, 0, 0, 255, 0, 0]
]

final = np.asarray(final)

groups, group_count = measure.label(final > 0, return_num = True, connectivity = 1)
 
print('Groups: \n', groups)
print(f'Number of particles: {group_count}')

df = (pd.DataFrame(dict(zip(['Particle #', 'Size [pixel #]'],
                            np.unique(groups, return_counts=True))))
        .loc[lambda d: d['Particle #'].ne(0)]
     )

pixel_nm_size = 1*1

df['A [nm2]'] = df['Size [pixel #]'] * pixel_nm_size

感谢您的帮助!

Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/133875
 
1322 次点击  
文章 [ 2 ]  |  最新文章 3 年前