Python之OpenCV 007 《走近混沌》分形艺术Fractal之美
著名的理论物理学家约翰·惠勒高度而精辟地评价曼德勃罗的著作:“今天,如果不了解分形,不能算是一个科学文化人”,他又说:“自然的分形几何使我们视野开阔,它的发展将导致新思想,新思想又导致新应用,新应用又导致新思想……”犹如分形本身一样,随之而产生的新思想和新应用将循环往复,层出不穷……
正如《走近混沌》所述,
分形,作为一个简单,混杂而美丽的存在,通过一个非线性迭代公式:
就实现了美丽的图案。
1975年夏天,一个寂静的夜晚,曼德勃罗正在思考他在宇宙学研究领域中碰到的一种统计现象。从60年代开始,这种貌似杂乱无章、破碎不堪的统计分布现象就困惑着曼德勃罗。在人口分布、生物进化、天象地貌、金融股票中,都有它的影子。一年前,曼德勃罗针对宇宙中的恒星分布(如康托尘埃),提出了一种数学模型。用这种模型可以解释奥伯斯佯谬,而不必依赖大爆炸理论。可是,这种新的分布模型却还没有一个名正言顺、适合它的名字!这种统计模型像什么呢?有些类似在1938年时,捷克的地理和人口学家Jaromír Korčák发表的论文《两种类型统计分布》中提到过的那种现象。曼德勃罗一边冥思苦想,一边随手翻阅着儿子的拉丁文字典。突然,一个醒目的拉丁词跃入他的眼中:fractus。字典上对这个词汇的解释与曼德勃罗脑海中的想法不谋而合:“分离的、无规则的碎片”。太好了,那就是些分离的、无规则的、支离破碎的碎片!这样,“分形”(fractal)这个名词,就此诞生了。
代码如下:
"""
PyQt AND OpenCV
By LiNYoUBiAO
2020/4/19 10:53
"""
import numpy as np
import cv2 as cvdef mandelbrot_set(xmin, xmax, ymin, ymax, xn, yn, maxiter, horizon=2.0):X = np.linspace(xmin, xmax, xn)Y = np.linspace(ymin, ymax, yn)C = X + Y[:, None] * 1j# np.zeros_lick(a) 顾名思义这个函数的意思就是生成一个和你所给数组a相同shape的全0数组。N = np.zeros_like(C, dtype=int)Z = np.zeros_like(C)for n in range(maxiter):I = np.less(abs(Z), horizon)N[I] = nZ[I] = Z[I] ** 2 + C[I]N[N == maxiter - 1] = 0return Z, Nif __name__ == '__main__':import matplotlib.pyplot as pltxmin, xmax, xn = -2.25, +0.75, 1500ymin, ymax, yn = -1.25, +1.25, 1500maxiter = 20horizon = 2.0 ** 40log_horizon = np.log(np.log(horizon)) / np.log(2)Z, N = mandelbrot_set(xmin, xmax, ymin, ymax, xn, yn, maxiter, horizon)# This line will generate warnings for null values but it is faster to# process them afterwards using the nan_to_num# nan_to_num: 使用0代替数组x中的nan元素,使用有限的数字代替inf元素with np.errstate(invalid='ignore'):M = np.nan_to_num(N + 1 -np.log(np.log(abs(Z))) / np.log(2) +log_horizon)cv.namedWindow("mandlebrot", cv.WINDOW_NORMAL)cv.imshow("mandlebrot", M)cv.waitKey(0)cv.destroyAllWindows()
生成图片:
参考:
- 数学的魅力:https://www.bilibili.com/video/av92903284
- 数学的魅力:https://www.bilibili.com/video/BV1N441187Dh/?spm_id_from=333.788.videocard.1
- C++实现:https://blog.csdn.net/u012198575/article/details/81357429
Python之OpenCV 007 《走近混沌》分形艺术Fractal之美相关推荐
- 计算机图形学在装饰设计中的应用,混沌分形图在软装饰艺术设计中的应用研究...
摘要: 分形(Fractal)是在二十世纪70年代兴起的最重要的非线性科学之一,曼德尔布罗特(Mandelbrot)通过数学公式迭代和计算机编程技术构建了以自己名字命名的Mandelbrot集,分形理 ...
- Python,OpenCV中的光学字符识别(OCR Optical Character Recognition)
Python,OpenCV中的光学字符识别(OCR Optical Character Recognition 1. 什么是OCR? 2. 光学字符识别简史 3. 光学字符识别的应用 4. OSD 方 ...
- 使用Python,OpenCV进行卡类型及16位卡号数字的OCR
使用Python,OpenCV进行卡类型及16位卡号数字的OCR 1. 效果图 2. 原理 2.1 OCR-A字体 2.2 检测过程步骤 2.3 优化 3. 源代码 参考 这篇博客将介绍如何通过Ope ...
- 使用Python,OpenCV的Meanshift 和 Camshift 算法来查找和跟踪视频中的对象
使用Python,OpenCV的Meanshift 和 Camshift 算法来查找和跟踪视频中的对象 1. 效果图 2. 源码 2.1 MeanShift 2.2 Camshift(Continuo ...
- 使用Python,OpenCV,本地二进制模式(LBP)进行人脸识别
使用Python,OpenCV与本地二进制模式(LBP)进行人脸识别 1. 效果图 2. 原理及步骤 2.1 原理 2.2 步骤 3. 源码 参考 在深度学习和暹罗网络之前,面部识别算法依赖于特征提取 ...
- Python,OpenCV提取图片中的多个茄子种子轮廓,并按从左到右排序后显示
Python,OpenCV提取图片中的多个茄子种子轮廓,并按从左到右排序后显示 1. 效果图 2. 源码 写这篇博客源于博友的提问,期望把下图中的多个茄子种子按从左到右的顺序提取出来: 1. 效果图 ...
- Python,OpenCV中的图像修复——cv2.inpaint()
Python,OpenCV中的图像修复--cv2.inpaint 1. 效果图 2. 原理 3. 源码 参考 image inpainting 图像修改 这篇博客将介绍如何通过OpenCV中图像修复的 ...
- Python,OpenCV中的K均值聚类——K-Means Cluster
Python,OpenCV中的K均值聚类 1. 效果图 2. 原理 2.1 什么是K均值聚类? 2.2 K均值聚类过程 2.3 cv2.kmeans(z, 2, None, criteria, 10, ...
- Python,OpenCV基于支持向量机SVM的手写数字OCR
Python,OpenCV基于支持向量机SVM的手写数字OCR 1. 效果图 2. SVM及原理 2. 源码 2.1 SVM的手写数字OCR 2.2 非线性SVM 参考 上一节介绍了基于KNN的手写数 ...
- Python,OpenCV中的霍夫圆变换——cv2.HoughCircles()
Python,OpenCV中的霍夫圆变换 1. 效果图 2. 源码 参考 这篇博客将学习如何使用霍夫圆变换在图像中找到圆圈,OpenCV使用cv2.HoughCircles()实现霍夫圆变换. cir ...
最新文章
- StoreFront web 无法启动指定的应用
- 【IT笔试面试题整理】有序数组生成最小高度二叉树
- 【vlan-给予mac地址认证】
- 深度学习中所有的优化器的详细介绍与列表化对比分析
- Eclipse远程部署
- 电力电子技术复习笔记1(简要版)
- Report Machine 的问题 补充!!!
- Android本地音乐播放器(二)
- 基于51单片机的交通灯原理图加代码
- 手机入侵修改服务器数据,手机怎么入侵服务器修改数据库
- 软件测试与代码安全详解
- 要重复多少次变成潜意识_什么是潜意识?如何利用潜意识为自己步步高升
- Python正则表达式及match函数的用法
- 最详细matlab 2018a安装教程步骤.
- 面试积累-Redis-使用过Redis分布式锁么,它是怎么实现的?
- 可折叠的table表格
- 关掉visual studio 在桌面上右键---在visual studio中打开
- VMware vsphere和VMware vsphere Hypervisor有什么不同
- 计算机游戏性能测评,游戏性能测试
- JS-正则表达式匹配获取