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,一经查实,立即删除!

相关文章

python生成器 图片分类_Python内置类型(6)——生成器

上节内容说到Python的for语句循环本质上就是通过调用Iterable可迭代对象的__iter()__方法获得一个Iterator迭代器对象,然后不断调用Iterator迭代器对象__next()__方法实现的。Iterator迭代器对象则是一个需要实现__iter__()和__next__()两个迭代器协议方法的对象。python中生成…

java 把方法当参数传递_java 中 如何将“一个类的方法 ”作为参数传到“另一个类的方法”中...

展开全部在java中这是没有办法做到的,因e5a48de588b662616964757a686964616f31333337396336为java不是函数式编程语言,不过可以通过传递一个接口来实现。下面解说java如何模拟:先定义一个接口:interface MethodInterface{//这个方法假如就是你…

轮询数据库 java_谁做过定时任务,轮询查询数据。

一、增加所依赖的JAR包1、增加Spring的Maven依赖org.springframeworkspring-webmvc3.0.5.RELEASE2、增加Quartz的Maven依赖org.quartz-schedulerquartz1.8.4二、增加定时业务逻辑类public class ExpireJobTask {/** Logger */private static final Logger logger LoggerFactor…

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

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

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

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

uuid java 重复_Java中使用UUID工具类生成唯一标志防止重复

import java.security.MessageDigest;import java.security.NoSuchAlgorithmException;import java.security.SecureRandom;import java.util.Random;import java.util.concurrent.ThreadLocalRandom;/*** 提供通用唯一识别码(universally unique identifier)(UUID)实现**/publ…

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

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

java get null_java 获取对象中为null的字段实例代码

下面一段简单的代码给大家分享java 获取对象中为null的字段,具体代码如下所述:private static String[] getNullPropertyNames(Object source) {final BeanWrapper src new BeanWrapperImpl(source);java.beans.PropertyDescriptor[] pds src.getPrope…

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

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

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

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

python编码器下载_Python Code128编码器

这是一个可以接受的答案,所以我将原始代码留在下面。但我更喜欢这种精致。在def list_join(seq): Join a sequence of lists into a single list, much like str.joinwill join a sequence of strings into a single string.return [x for sub in seq for x in sub]…

java url后面带sessionid_Spring Mvc boot解决静态url带jsessionid问题

1.jsessionid是什么?Jsessionid只是tomcat的对sessionid的叫法,其实就是sessionid;在其它的容器也许就不叫jsessionid了。2.那么有什么问题?首先这是一个保险措施 因为Session默认是需要Cookie支持的,但有些客户浏览器是关闭Cook…

python二分查找算法_如何使用python的二分查找算法

如何使用python的二分查找算法发布时间:2020-11-18 09:27:29

retryexec.java 94_解决feign调用接口不稳定的问题

我就废话不多说了,大家还是直接看代码吧~Caused by: java.net.SocketException: Software caused connection abort: recv failedat java.net.SocketInputStream.socketRead0(Native Method)at java.net.SocketInputStream.socketRead(SocketInputStream.java:116)a…

lua pcall 返回值_Redis和Lua整合

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

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

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

哲学家就餐问题python_哲学家就餐-同步问题解析-python

五个哲学家吃五盘通心粉,由于通心粉很滑,所以必须要拿起左右两边的叉子才能吃到。叉子的摆放如图所示。那么问题来了:能为每一个哲学家写一段描述其行为的程序,保证不会出现死锁。解法1:让他等待能够使用的时候,然后去…

java compare equla_Java中的equals,==,compareTo和compare的比较

Java中的equals(),,compareTo()和compare()首先只有可以用作两个基本类型数据之间的比较,当然是值比较。当用作两个对象比较时,比较的是对象引用,而不是值比较。其次任何对象都可以调用.equals()方法,因为这是从Object类继承下来的…

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

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

java摘要_java 摘要

packagecom.aarony.test;importjava.io.IOException;importjava.security.MessageDigest;importsun.misc.BASE64Decoder;importsun.misc.BASE64Encoder;public classDigestDemo {/**** 此方法描述的是:base64 解码**author: Aarony*version: 2018年6月20日 下午9:16…