sid图像数据_实战材料信息学:使用skimage处理扫描电子显微镜(SEM)图像数据

算开个头,不算特别实战

扫描电子显微镜,材料开发不可缺少的分析仪器。原理就不详述了。材料的形貌,具体长什么样的都可以看得很清楚。

材料表面的形貌很多情况下会和材料的物性产生直接关系,比如说可以从SEM看出粒子的直径分布,多孔材料的孔径等等。孔径这个就很直接了,孔径越小,材料的表面积越大,有可能相对的化学活性比如说气体的吸收能力会更大。

所以,有可能可以利用SEM作为材料的描述符X,建立模型来预测有关的物性?现在手边没有这样子的数据,但是觉得可能这方面的先行研究应该有一些吧。之前曾经有提到一块钱买中巴:机器学习在材料方向的应用(lightgbm+贝叶斯优化调参)​zhuanlan.zhihu.comzhihu-card-default.svg

可以用组成来预测物性。在这里,如果我们有组成,加上图像数据,应该可以得到更高的精度??可惜好像还没有系统性的数据

python有skimage这个包可以对材料进行一些预处理。对于材料的SEM也可以进行一些有意思的操作。哈佛大学有一个很简单的SEM的数据库,里面有四种材料的SEM图,但是好像没有标记,然后每种材料的样本也不大就四张图。可以在下面的地址下载https://dataverse.harvard.edu/dataset.xhtml?persistentId=doi:10.7910/DVN/HVBW0Q#__sid=js0​dataverse.harvard.edu

首先对数据进行读取。这里我选择的是两张多孔粒子的图像

from skimage.io import imread

import pandas as pd

import seaborn as sns

import matplotlib.pyplot as plt

from pathlib import Path

import numpy as np

%matplotlib inline

plt.rcParams["figure.figsize"] = (8, 8)

plt.rcParams["figure.dpi"] = 150

plt.rcParams["font.size"] = 14

plt.rcParams['font.family'] = ['sans-serif']

plt.rcParams['font.sans-serif'] = ['DejaVu Sans']

plt.style.use('ggplot')

sns.set_style("whitegrid", {'axes.grid': False})

imgg=imread('...../archive/3dsem/Pollen1001.jpg')

fig = plt.plot(figsize=(3, 3))

plt.imshow(imgg)

多孔材料嘛。有密集恐惧症的同学对不住了。这里修改一下选项as_gray可以使得图片变成更加鲜明的样子。读取了两张图,其中一张长这样

imgg=imread('/Users/yweilin/Desktop/study/code/archive/3dsem/Pollen1001.jpg', as_gray=True)

imgg2=imread('/Users/yweilin/Desktop/study/code/archive/3dsem/Pollen1002.jpg', as_gray=True)

fig = plt.plot(figsize=(3, 3))

plt.imshow(imgg)

这个图下面有具体的拍照时间比例尺什么资料,我们可以把这一块锯掉。实际上读取这个数据之后,这是一个像素的矩阵,把对应坐标部分的数据去掉就可以了。

fig = plt.plot(figsize=(3, 3))

plt.imshow(imgg[:-100])

接下来我们可以对图片进行特征点提取

特征点是图像处理中,特征点指的是图像灰度值发生剧烈变化的点或者在图像边缘上曲率较大的点(即两个边缘的交点)。

百度百科里这样定义的。这里的特征点则可以反应出一些孔的有关信息。这个很重要因为之前也说了会对物性产生影响。

from skimage.feature import corner_harris, corner_peaks, ORB

descriptor_extractor = ORB(n_keypoints=1000)

def extract_points(in_img):

descriptor_extractor.detect_and_extract(in_img)

return {'keypoints': descriptor_extractor.keypoints,

'descriptors': descriptor_extractor.descriptors}

extracted_image=extract_points(imgg[:-100])

extracted_image2=extract_points(imgg2[:-100])

特征点可视化之后是这样的。注意一下这里的特征点图是90度翻转过的。

fig = plt.plot(figsize=(3, 3))

plt.plot(extracted_image['keypoints'][:, 0],

extracted_image['keypoints'][:, 1],

'.',)

# plt.plot(extracted_image2['keypoints'][:, 0],

# extracted_image2['keypoints'][:, 1],

# '.',)

这里imgg2是二号图像,与一号图像相比似乎别无两样。

对照一号图片的特征点可以看出似乎还是有一些不同之处的。

fig = plt.plot(figsize=(3, 3))

plt.plot(extracted_image['keypoints'][:, 0],

extracted_image['keypoints'][:, 1],

'.',)

plt.plot(extracted_image2['keypoints'][:, 0],

extracted_image2['keypoints'][:, 1],

'.',)

特征点和特征点之间出现了一定程度的偏移。将特征点投影到原图,可以进一步观察对应信息

from skimage.feature import match_descriptors, plot_matches

c_matches = match_descriptors(extracted_image['descriptors'],extracted_image2['descriptors'], cross_check=True)

fig = plt.plot(figsize=(3, 3))

plot_matches(plt,

imgg[:-100], imgg2[:-100],

extracted_image['keypoints'], extracted_image2['keypoints'],

c_matches)

可以观察到提取的特征点分布在孔的附近。具体看一下两张图的特征点之间的距离以及分布

dist_list=[]

for i, (c_idx, n_idx) in enumerate(c_matches):

x_vec = [extracted_image['keypoints'][c_idx, 0], extracted_image2['keypoints'][n_idx, 0]]

y_vec = [extracted_image['keypoints'][c_idx, 1], extracted_image2['keypoints'][n_idx, 1]]

dist = np.sqrt(np.square(np.diff(x_vec))+np.square(np.diff(y_vec)))[0]

dist_list.append(dist)

dist_list_df=pd.DataFrame(dist_list,columns=['distance'])

dist_list_df.hist(figsize=(5, 5))

这两张图之间的大部分图还是匹配的。接下来看一看距离在100以上的有点异常的特征点

outlier=[]

outlier_index=[]

for x in dist_list:

if x > 100:

outlier.append(x)

outlier_index.append(dist_list.index(x))

fig = plt.plot(figsize=(3, 3))

plt.plot(extracted_image['keypoints'][:, 0][outlier_index],

extracted_image['keypoints'][:, 1][outlier_index],

'.',)

plt.plot(extracted_image2['keypoints'][:, 0][outlier_index],

extracted_image2['keypoints'][:, 1][outlier_index],

'.',)

还是可接受的吧。可能因为亮度什么的或许有些不同?https://github.com/onecoinbuybus/chemoinformatics/blob/master/matinfo.ipynb​github.com

参考了kaggle看到的文章https://www.kaggle.com/kmader/3dsem-a-dataset-for-3d-sem-surface-reconstruction​www.kaggle.com

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/559427.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

arcgis制作空间变化图怎么做_听说如果做数据分析不用GIS,会被开?

Q你有没有遇到这样的情况?身边的同事或同学经常说什么高程图、坡向图、坡度图、生态水文图、热力密度图、大数据算法,而自己却一无所知,心里感到特别的慌啊。文末附ArcGIS最新版及超强数据神器 很多人会说,“设计师是感性的&#…

仅完成部分的readprocessmemory或write_王者荣耀:三种李小龙获取方式!无需完成任务、28号即可兑换...

哈喽大家好!我是你们的小菜鸡“荣耀急先锋”王者荣耀五周年庆限定皮肤李小龙活动已经开始啦!大家有参加了吗?或者说对这个活动不太理解,针对这些小伙伴菜鸡今天就简单的跟大家讲讲李小龙皮肤活动的规则,让我们一起看看…

优秀ppt作品范例_首次公开|锐普的内部PPT配色库

每次发锐普的作品,总会有小伙伴们问:这么漂亮的配色到底是怎么做的呢?今天我在锐普内部的资源库发现一个超级宝贝——锐普内部的PPT配色库,1008张超精彩PPT配色范例。我的天,原来设计部竟然还藏着这种宝贝!…

linux rz sz 安装_Windows与Linux文件传输之lrzsz工具

请关注本头条号,每天坚持更新原创干货技术文章如需学习视频,请查看本头条号简介,免费在线观看学习视频1. lrzsz工具简介Windows向Linux传输文件,最简单的方法是使用rz和sz命令。当然用有其他的方法,比如通过ssh(winscp…

java游戏重新开始_问题1:java问题--某局小游戏结束后怎么重新开始?

有个问题,想了好久没解决,上网找了下,貌似也没找到好的解决方法(谷歌暂时没上去),现在这里写下来吧:最近在写一个五子棋的小游戏,也算是刚刚开始java入门的一个作品了吧,刚刚完成到人人对战(当然…

lua pcall 返回值_Redis和Lua整合

前面我们已经介绍完了Redis相关的理论知识,从本篇开始我们介绍一些Redis相关的时机应用。比如:Redis整合LuaRedis的消息模式Redis实现分布式锁常见的缓存问题我们先从Redis整合Lua的使用开始。lua是一种轻量小巧的脚本语言,用标准C语言编写并…

java 异步调用webapi_Async Await异步调用WebApi

先铺垫一些基础知识 在 .net 4.5中出现了 Async Await关键字,配合之前版本的Task 来使得开发异步程序更为简单易控。 在使用它们之前 我们先关心下 为什么要使用它们。好比 一个人做几件事,那他得一件一件的做完,而如果添加几个人手一起帮着…

百度相关搜索软件_不太热门的办公神器软件篇搜索相关

这次介绍两个windows平台超好用的搜索神器——listary和everything全文阅读约需3分钟在工作中,虽然大部分文件都会分门别类地放在对应的文件夹中,但总有一些放完就忘了在哪或是层级过深打开不便的情况。这两个搜索神器完美地解决了找不到文件且windows自…

mysql 回滚段_MySQL和PostgreSQL比较

1、MySQL相对来说比较年轻,首度出现在1994年。它声称自己是最流行的开源数据库。MySQL就是LAMP(用于Web开发的软件包,包括 Linux、Apache及Perl/PHP/Python)中的M。构建在LAMP栈之上的大多数应用都会使用MySQL,包括那些知名的应用&#xff0c…

dbscan java_DBSCAN算法的Java,C++,Python实现

最近由于要实现‘基于网格的DBSCAN算法’,网上有没有找到现成的代码[如果您有代码,麻烦联系我],只好参考已有的DBSCAN算法的实现。先从网上随便找了几篇放这儿,之后对比研究。DBSCAN简介:1.简介DBSCAN 算法是一种基于密…

java volatile lock_Java并发学习笔记 -- Java中的Lock、volatile、同步关键字

Java并发一、锁1. 偏向锁1. 思想背景来源:HotSpot的作者经过研究发现,大多数情况下,锁不仅不存在多线程竞争,而且总是由同 一线程多次获得,为了让线程获得锁的代价更低而引入了偏向锁。原理:在对象头和栈帧…

python 数组赋值_pythonamp;numpy的赋值

有点编程基础的童鞋看到这个标题可能会有点懵逼,这还是个问题吗?不就是个等号()解决问题嘛!我也希望是如此简单,因为上个星期被这个问题折磨到崩溃!一般的python程序需要赋值时的确是通过等号()实现的,不管…

我的世界java 内存_我的世界如何分配内存

如果你在运行Minecraft时出现内存错误等问题,你可能需要给Minecraft分配更多内存来解决运行故障。如果你玩的是新版本的Minecraft,那么你可以从启动器里直接分配内存(RAM)。如果你使用的是旧版本,那么你需要创建一些文件来改变Minecraft内存使…

springbean的生命周期_spring bean生命周期(涵盖spring常用接口的载入)

spring bean生命周期流程图:​​​​其中包含了很多常用的接口,可以参考spring 常用接口;下面写个例子证明下:1.实现InitializingBean以及各个Aware接口public class UserB implements InitializingBean , BeanFactoryAware , Bea…

python中的索引从几开始计数_计算机为什么要从 0 开始计数?

作者:程序喵大人来源:程序喵大人大家好,我是猫哥!众所周知,计算机是从0开始计数,而不是我们平时常用的从1开始计数,但你有想过为什么吗?其实不是计算机从0开始计数而是多数编程语言中…

coreos 安装mysql_如何执行CoreOS Linux的裸机安装

本文将介绍如何在裸机服务器上加载CoreOs Linux。关于在计算机上安装CoreOS Linux的更多方法。在本文中,我们将首先启动一些Live Linux发行版。从USB或CDROM提取Fedora,然后使用CoreOS的安装脚本在给定的硬盘驱动器上执行实际的CoreOS Linux。您将需要什…

websocket 发送图片_基于WebSocket的web端IM即时通讯应用的开发

基于WebSocket的web端IM即时通讯应用的开发功能列表:1、Web端的IM即时通讯应用2、支持上线、下线、实时在线提醒3、单聊、群聊的建立4、普通文字、表情、图片的传输(子定义富文本)5、单人的顶级提醒,多对话的窗口的提醒6、调用图灵机器人的自动回复演示目…

PHP定时抽奖怎么实现的,PHP 实现抽奖逻辑

public static function get_rand($proArr) {$result "";//概率数组的总概率精度$proSum array_sum($proArr);//概率数组循环foreach ($proArr as $key > $proCur) {$randNum mt_rand(1, $proSum);if ($randNum < $proCur) {$result $key;break;} else {$p…

绿盟漏洞扫描_主机安全漏洞解决方案

前几天发了一篇等保2.0的文章(等保2.0简单介绍 )&#xff0c;文章里面提到&#xff0c;相比于等保1.0标准&#xff0c;等保2.0很大幅度上对安全通用要求的一些控制项做了大幅精简&#xff0c;但是等保二级的要求仍多达135项、等保三级多达211项。https://mp.weixin.qq.com/s/kE…

采用光线跟踪绘制场景 c++_光线追踪的相干性聚集:硬件光线追踪的优势

尽管在理论上实现现代GPU的方法是无限的&#xff0c;但真正有效的方法是切实地了解问题并着手将方案变为现实。制造现代高性能半导体器件以及试图加速当前可编程光栅化技术所面临的问题揭示了GPU硬件行业发展的未来趋势。例如在现代GPU中SIMD处理和固定功能纹理单元是必不可少的…