用matlab写的径向分布函数RDF
RDF是径向分布函数Radical distribution function的缩写,指的是给定一个空间,在此空间以一个对象为中心,去寻找周围对象的的概率。对于分子模拟的径向分布函数实则也是求解粒子在周期性边界盒子的区域密度和全局密度的比值。
其中:
区域密度 = 每一个球壳的数密度 / 球壳体积。
全局密度 = 盒子里面的粒子总数 / 盒子的体积
径向分布 = 区域密度 / 全局密度
但是, 本文用于计算的RDF是基于二维的。目前很多仿真软件的到结果是:一张图片上有很多个原子。本文是用于计算图像上原子的RDF.
则:
区域密度 = 每个圆内包含的原子个数 / 圆的面积。
全局密度 = 图片上原子的总数 / 图片面积
径向分布 = 区域密度 / 全局密度
matlab代码演示:
Circle_detect.m(检测输入图片上的圆)
function [centers,particle_num] = Circle_detect(image)
%function:检测输入图像的圆
%input:image:用于检测圆的图片彩色图片
%output:centers:检测到的圆的圆心坐标;particle_num:检测到图像上圆的总数gray = rgb2gray(image); %灰度化
bw = imbinarize(gray); %二值化
bw_inverse = imcomplement(bw); %二值图像反转,即0变1,1变0
[centers,radius] = imfindcircles(bw_inverse,[5,20]); %检测图像上半径在5~20之间的圆,也可以是其它,看实际情况需要
particle_num = length(radius(:)); %统计圆的个数
%显示图像
figure;
imshow(bw_inverse);
hold on;
viscircles(centers,radius,'EdgeColor','b');
NumPerRadius.m(计算每个原子的每个单位圆内的原子个数)
function gr = NumPerRadius(centers,rc,dr)[row,col] = size(centers);
num = round(rc/dr);
gr=zeros(num,1);for i=1:(row-1)for j = i+1:rowdistance = sqrt((centers(i,1)-centers(j,1))^2 + (centers(i,2)-centers(j,2))^2);if distance <= rclane = round(distance/dr);gr(lane) = gr(lane)+1;endend
end
RDF.m(计算径向分布)
function [index,percent] = rdf(height,width,gr,particle_num,dr)[row,col] = size(gr);
percent = zeros(row,1);
gobal_rho = particle_num / (height * width);
for i=1:rowtemp = gr(i);temp = temp / particle_num;temp = temp / (pi*((i*dr)^2-((i-1)*dr)^2));percent(i) = temp / gobal_rho;
endindex = (1:row)/3.4;
percent = reshape(percent,1,row);
figure;
% plot(index,percent,'r');
xlim([0, 20]);
ylim([0, 20]);
values = spcrv([[index(1) index index(end)];[percent(1) percent percent(end)]],3);
plot(values(1,:),values(2,:), 'r');
% hold on;
% plot(index,percent,'go');
main.m(主函数)
close all;
clc;image = imread('input2.png');
[height,width,channel] = size(image);
rc = width/2; %搜索圆的最大半径
n=15;
dr = rc/n;
[centers,particle_num] = Circle_detect(image);
gr = NumPerRadius(centers,rc,dr);
[index,percent] = rdf(height,width,gr,particle_num,dr);
输入图片:
检测图像上原子的效果图:
径向分布函数效果图:
需要源代码的可从以下链接下载:
径向分布函数(RDF).zip
用matlab写的径向分布函数RDF相关推荐
- 【LAMMPS系列】径向分布函数RDF与结构因子SF
大家好,我是粥粥. 这几天,用PYTHON写了一个计算SiO2的O-Si间的偏径向分布函数(partial RDF)和针对不同Si近邻(neighbor1,neighbor2-neighbor6)的偏 ...
- lammps输出RDF(径向分布函数)详解及示例教程
原创 一直陪着你的 LAMMPS交流站 2021-10-18 11:40 收录于话题#lammps案例16个内容 大家好,小编最近的课题需要输出RDF(径向分布函数),小编就去lammps官网及网络查 ...
- 用Python实现径向分布函数(RDF)的计算
什么是RDF? 其实什么是径向分布函数(Radial distribution function)并不需要我去赘述,毕竟百度一搜一大堆.这里给出一个我第一接触RDF时看到的定义,图和公式给的也比较清楚 ...
- 【转帖】径向分布函数程序与简单说明 (小木虫)
径向分布函数g(r)代表了球壳内的平均数密度 为离中心分子距离为r,体积为 的球壳内的瞬时分子数. 具体参见李如生,<平衡和非平衡统计力学>科学出版社:1995 CODE: SUBROUT ...
- lammps教程:径向分布函数g(r)的计算与输出方法
大家好,我是小马老师. 本文介绍如何使用lammps计算径向分布函数g®. 径向分布函数(Radial distribution function)是指给定某个粒子的坐标,其他粒子在空间的分布几率. ...
- 归并有效排序算法matlab,科学网—[用MATLAB写算法]之排序算法2)归并排序merge sort - 徐勇刚的博文...
归并排序(merge sort)是一种利用分治策略(divide and conquer)进行排序的算法,算法复杂度为 $\Theta (nlog_{2}n)$ . filename: merge_s ...
- 数据拟合 | MATLAB实现RBF径向基神经网络多输入数据拟合
数据拟合 | MATLAB实现RBF径向基神经网络多输入数据拟合 目录 数据拟合 | MATLAB实现RBF径向基神经网络多输入数据拟合 基本介绍 程序设计 模型差异 参考资料 基本介绍 RBF神将网 ...
- 回归预测 | MATLAB实现RBF径向基神经网络多输入单输出
回归预测 | MATLAB实现RBF径向基神经网络多输入单输出 目录 回归预测 | MATLAB实现RBF径向基神经网络多输入单输出 预测效果 基本介绍 模型结构 程序设计 参考资料 预测效果 基本介 ...
- 回归预测 | MATLAB实现RBF径向基神经网络非线性函数回归
回归预测 | MATLAB实现RBF径向基神经网络多非线性函数回归 目录 回归预测 | MATLAB实现RBF径向基神经网络多非线性函数回归 基本介绍 程序设计 学习总结 参考资料 基本介绍 RBF神 ...
最新文章
- matlab图像滤波
- AD633低成本模拟乘法器
- 根据id去重_Person Re-ID研究综述
- linux平台 一个简单的helloworld动态库的制作与使用
- 阿里灵杰:AI工程化助力产业数字升级
- 简单了解各种序列化技术-kyro序列化框架
- .NET Core 3.0 中间件 Middleware
- EasyUI加zTree使用解析 easyui修改操作的表单回显方法 验证框提交表单前验证 datagrid的load方法
- 【今日CV 计算机视觉论文速览 第148期】Mon, 29 Jul 2019
- 怎么查看mysql帮助文档_高效查看MySQL帮助文档的方法
- mysql垃圾清理_mysql 垃圾图片清理
- frp源码剖析-frp中的log模块
- myPRO HMI/SCADA 产品被曝多个严重漏洞
- 关于android输入框被键盘遮挡的问题
- 面试题之——多线程详解
- django中url与view配置方法
- Excel VBA 中有关使用 UBound + CurrentRegion 提示类型不匹配的问题及解决方案
- 张蔷《手扶拖拉机斯基》编舞动作分解
- 常用字符串库函数总结
- S32K1XX系列单片机 ——MCAL 的CAN模块配置