推荐星级:
- 1
- 2
- 3
- 4
- 5
基于Python技术的自然图像随机数生成设计
资料介绍
根据随机数验证图形散乱无序这一特征,反演随机数列。大自然中有许多景象,我们从中随机提取一幅或多幅图像。利用Python语言,通过高斯模糊将黑白图像的黑白点均匀化,利用斐波那契数列多次提取等方法,得到一组或多组随机数,最后经过蒙特卡洛π验证,证明这组数是随机数。
部分文件列表
文件名 | 大小 |
基于Python技术的自然图像随机数生成设计.pdf | 2M |
部分页面预览
(完整内容请下载后查看)学术探讨∙基金项目
基于Python技术的自然图像随机数生成设计
张明浩 王虹宇 张毅宁
(鞍山师范学院 物理科学与技术学院,辽宁 鞍山 114007)
[摘 要] 根据随机数验证图形散乱无序这一特征,反演随机数列。大自然中有许多景象,我们从中随机提取一幅或多
幅图像。利用Python语言,通过高斯模糊将黑白图像的黑白点均匀化,利用斐波那契数列多次提取等方法,得到一组或多组
随机数,最后经过蒙特卡洛π验证,证明这组数是随机数。
[关键词] 斐波那契数列;蒙特卡洛验证;高斯模糊;随机数;Python
中图分类号:TN918.1
文献识别码:A
文章编号:1008 - 6609 (2017) 08 - 0013 - 03
一是理论上准确地描述很多实际的物理过程非常困难
和复杂,即便是掌握了物理系统的初值和运行规律,也很难
精确地计算出这些物理过程将来的状态。
1
有关随机数的基本问题
1.1 随机数表需要的理由
目前,数学对随机数(或随机序列)仍然没有统一定义。
真随机数性质的一般描述是在随机序列无限长的情况下具
有如下性质:
二是周围环境对于物理系统的运行产生影响,比如两个
相同的器件由于温度或电压等条件的影响,系统开始运行的
初值可能不同,这也导致了预测的困难。
(1)均匀分布:一串真随机序列满足均匀分布的统计特
性,如序列的每一位是0或1的概率相等,都为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 灰度值定为
1,否则为0
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)是
一个基于(开源)发行的跨平台计算机视觉库,可以运行在
Linux、Windows和Mac OS操作系统上。它具有轻量级且高
n=len(mystr)-index[-1] #得到10序列长度
index=[1,2,3,5,8,13,21,33,54,87]# 斐波那契数列
num=[0]*n
效的特点——由一系列C函数和少量C++ 类构成,同时提供
了 Python、Ruby、MATLAB 等语言的接口,提供图像处理和
计算机视觉方面的很多通用算法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)#对图像进行高斯模糊,保证0、1值均匀分布
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)