推荐星级:
  • 1
  • 2
  • 3
  • 4
  • 5

基于Python技术的自然图像随机数生成设计

更新时间:2019-12-26 17:26:20 大小:2M 上传用户:songhuahua查看TA发布的资源 标签:python自然图像随机数 下载积分:1分 评价赚积分 (如何评价?) 收藏 评论(0) 举报

资料介绍

根据随机数验证图形散乱无序这一特征,反演随机数列。大自然中有许多景象,我们从中随机提取一幅或多幅图像。利用Python语言,通过高斯模糊将黑白图像的黑白点均匀化,利用斐波那契数列多次提取等方法,得到一组或多组随机数,最后经过蒙特卡洛π验证,证明这组数是随机数。


部分文件列表

文件名 大小
基于Python技术的自然图像随机数生成设计.pdf 2M

部分页面预览

(完整内容请下载后查看)
学术探讨基金项目  
Python术的自然图像随机数生成设计  
张明浩 王虹宇 张毅宁  
(鞍山师范学院 物理科学与技术学院 鞍山 114007)  
[摘 要] 根据随机数验证图形散乱无序这一特征演随机数列。大自然中有许多景象们从中随机提取一幅或多  
幅图像。利Python过高斯模糊将黑白图像的黑白点均匀化用斐波那契数列多次提取等方法到一组或多组  
随机数后经过蒙特卡π验证明这组数是随机数。  
[关键词] 斐波那契数列特卡洛验证斯模糊机数Python  
中图分类号TN918.1  
文献识别码A  
文章编号1008 - 6609 (2017) 08 - 0013 - 03  
一是理论上准确地描述很多实际的物理过程非常困难  
和复杂便是掌握了物理系统的初值和运行规律很难  
精确地计算出这些物理过程将来的状态。  
1
有关随机数的基本问题  
1.1 随机数表需要的理由  
目前学对随机数(或随机序列)仍然没有统一定义。  
真随机数性质的一般描述是在随机序列无限长的情况下具  
有如下性质:  
二是周围环境对于物理系统的运行产生影响如两个  
相同的器件由于温度或电压等条件的影响统开始运行的  
初值可能不同也导致了预测的困难。  
1匀分布:一串真随机序列满足均匀分布的统计特  
序列的每一位01的概率相等0.5。  
2可预测性:真随机序列的每一位是相互独立的给  
定序列某一位的值不能预测或计算出后一位的值。  
基于数学算法的伪随机数发生器实际上可以产生近似  
于均匀分布随机序列。现代计算机算法已经可以产生足够  
好的伪随机数,其周期性已经不再是关键问题, 但是与真随机  
数相比最大的区别在于可否对下次结果进行预测。很明显  
伪随机数虽然快捷, 但是对于同样的种子, 产生的随机序列  
将会是相同的然不具有不可预测性[1]。  
由于本质上很多物理过程并不是真随机的论上并不  
满足不可预测性的要求。所以产生的随机数为伪随机数。  
其研究设计过程一般是先选取一个物理世界的真随机源,然  
后选用特定的方法从中提取真随机数。物理真随机数发生  
器具有真正的随机性和不可预知性,其采样的真实物理现象  
有多种[3],: 放射性衰变,电子电路噪声,大气噪声, 电子振荡  
器的频率抖动光混沌子相位噪声量子的偏振等。  
1.3 常用随机数基本检验方法  
常用的基本检验方法有:频数检验列检验克检  
程检验和自相关检验等目前并不存在真正意义上  
的真随机性的检测方法是因为真随机性是基于无限长序  
列的以数学统计上的检测是无法完成的。目前工业上常  
用的统计检测一般是基于固定长度随机序列的(一般是 1  
Gbit)ENT (pseudo- random number sequence test pro-  
gram), NIST- STS (a statistical test suite for the validation of  
random number generators and pseudo random number genera-  
tors for cryptographic applications), Diehard (a battery of tests  
of randomness)[4]。其中 ENT 检验为国际上通用的随机数  
检测程序给出产生的随机序列的数学平均值, 每比特熵  
1.2 常见随机数生成方法  
常用的产生伪随机数的数学算法有线性同余发生器(lin-  
ear congruential generator)迟斐波那契发生器(lagged Fibo-  
nacci generator)和线性反馈移位寄存器(linear feedback shift  
register)[2]。  
除了基于确定数学算法的伪随机数发生器有一类是  
物理伪随机数发生器生的随机数是来源于客观的物理过  
客观的物理过程并不意味着真随机。相对于数学算  
理伪随机数发生器的随机性两大特点:  
—————————————  
作者简介1996津人究方向为电子信息科学与技术。  
基金项目2016辽宁省大学生创新与创业项目械随机数生成器的设计与实验与真随机数表的生成201610169025。  
- 13 -  
学术探讨基金项目  
χ检测值Monte Carlo 方法计算得到的 π, 以及序列相  
关系数。  
2.4 图像的数值转化  
进一步将黑白图像转化成 0-1 序列储到文num.  
txt。  
2
Python技术的自然图像随机数生成的过程  
num=""  
2.1 设计思路及原理说明  
for i in range(img.shape[0]): #对图像值的二维数组进行  
遍历  
首先自然界中提取一幅或多幅图像以假定一般  
情况下一图像不具有规律重复特征后将其转化为黑  
白图像化过程中用高斯模糊将黑白图像中的黑白点  
均匀化而转化成 0-1 序列将其转化为一个大十进制  
后再从这个十进制中按斐波那契序列提取一定数量的  
数列作为一个十进制数。依次改变提取起始位过循环多  
次提取得一组随机数。  
for j in range(img.shape[1]):  
if img[i][j]>100: num+="1"#将高于 100 灰度值定为  
10  
else: num+="0"  
f=file("num.txt","a") #10 列转化为字符型存储到  
num.txt件中  
2.2 Python相关技术的原因  
f.write(str(int(num,2)))  
Python 是一种面向对象持动态语义置高级数据  
2.5 随机数生成  
结构法简洁优美于扩展的解释型脚本语script lan-  
f=open("num.txt") #num.txt件  
mystr=f.read()#num.txt件中0-1序列读出  
f.close()  
[5]  
guage) 。OpenCV(Open Source Computer Vision Library)是  
一个基开源行的跨平台计算机视觉库以运行在  
LinuxWindowsMac OS操作系统上。它具有轻量级且高  
n=len(mystr)-index[-1] #10序列长度  
index=[1,2,3,5,8,13,21,33,54,87]# 斐波那契数列  
num=[0]*n  
效的特点由一系C函数和少C++ 类构成时提供  
PythonRubyMATLAB 等语言的接口供图像处理和  
计算机视觉方面的很多通用算1[6]。因此们将二者结合  
进行图像处理。  
for i in range(n):  
mynum=""  
2.3 图像的二值处理  
for j in range(len(index)):  
OpenCV工具包对图像进行二值处理十分方便图  
像处理前后如1所示,其过程如下:  
mynum+=mystr[i+index[j]]#以斐波那契数列为下标  
获得一个数组成的字符  
im_gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)  
num[i]=float(int(mynum)/10000000000.00) #将下标获得  
的字符变成浮点小数循环后变成数组  
fo=open("newnum.csv","w")fo.write("random,\n")#浮  
点小数数组变成字符存储到"newnum.csv"文件中  
for i in range(n): fo.write(str(num[i])+","+"\n")fo.close()  
#
用灰度模式打开要处理的图像  
retval,im_at_fixed= cv2.threshold(im_gray, 50, 255, cv2.  
THRESH_BINARY)#50-255 之间的灰度值作为图像转换  
的阈值  
im_at_gaussian=cv2.adaptiveThreshold(im_gray,255,cv2.  
ADAPTIVE_THRESH_GAUSSIAN_C, cv2.THRESH_BINA-  
RY, 5, 7)#对图像进行高斯模糊01值均匀分布  
3
蒙特卡π验证  
蒙特卡罗方法是以概率和统计理论方法为基础的计算  
方法[7]。认为平面系上的一个边长1的正方形及其内部的  
一个形状不规则图形该正方随机地N 个  
M 个点落图形图形面积近似为 M/  
N。而这个图形接近圆面积π。实现代码如下:  
import pylab as plt #pylab绘图包  
incount = 0; count = 100000;x=[];y=[];  
for i in range(count) :x.append(num[i])y.append(num  
[count+i])#将小数数组赋给蒙特卡洛点变x,y  
if (x[i]**2 + y[i]**2) < 1 :incount+=1 #x,y对应的点  
在单位元内1  
1 像处理前后原图与灰度图  
- 14 -  

全部评论(0)

暂无评论