数字图像处理:图像内插
图像内插
内插通常在图像放大、缩小`旋转和几何校正等任务中使用。内插是用已知数据来估计未知位置的值的过程°下面用—个简单的例子开始这—主题的探讨。假设大小为500×500像素的—幅图像要放大1.5倍即放大到750×750像素。一种简单的放大方法是,创建—个大小为750×750像素的假想网格’网格的像素间隔完全与原图像的像素间隔相同,然后收缩网格’使它完全与原图像重叠。显然’收缩后的750×750网格的像素间隔要小于原图像的像素间隔。
数字图像处理中的图像插值是一种处理图像的方法,它涉及在已知像素值的位置上估计未知像素值的过程。图像插值在图像缩放、旋转、变形等操作中经常用到。以下是一些常见的图像插值算法:
最邻近插值(Nearest-Neighbor Interpolation)
- 基本思想是选择离目标位置最近的已知像素值作为插值结果。
- 算法简单,但可能导致图像锯齿状伪影。
最邻近插值是一种简单而直观的图像插值方法,其基本思想是在目标位置的附近选择最近的已知像素值作为插值结果。下面是最邻近插值的详细解释和Python实现示例:
最邻近插值算法:
- 目标位置确定: 对于目标位置
(x, y)
,找到最近的整数坐标(round(x), round(y))
。 - 插值计算: 目标位置的像素值由最近的整数坐标对应的已知像素值确定。
Python实现:
import numpy as np
from PIL import Imagedef nearest_neighbor_interpolation(image, new_size):# 输入:image - 原始图像,new_size - 插值后的图像尺寸# 输出:插值后的图像# 获取原始图像尺寸old_size = image.size# 计算尺寸缩放比例scale_x = new_size[0] / old_size[0]scale_y = new_size[1] / old_size[1]# 创建新图像new_image = Image.new("RGB", new_size)# 最邻近插值for y in range(new_size[1]):for x in range(new_size[0]):# 计算原始图像中对应位置old_x = round(x / scale_x)old_y = round(y / scale_y)# 获取原始图像中的像素值pixel = image.getpixel((old_x, old_y))# 在新图像中设置像素值new_image.putpixel((x, y), pixel)return new_image# 示例:加载图像并进行最邻近插值
input_image_path = "path/to/your/image.jpg"
output_size = (400, 300)# 打开原始图像
original_image = Image.open(input_image_path)# 进行最邻近插值
result_image = nearest_neighbor_interpolation(original_image, output_size)# 显示原始图像和插值后的图像
original_image.show(title="Original Image")
result_image.show(title="Nearest Neighbor Interpolation Result")
这个示例中使用了Pillow库(PIL库的一个分支)来处理图像。确保你已经安装了这个库,你可以使用以下命令来安装:
pip install Pillow
请替换 input_image_path
为你实际的图像路径。这段代码演示了最邻近插值的基本原理和如何在Python中实现。
双线性插值(Bilinear Interpolation)
- 在最邻近插值的基础上,考虑目标位置周围的4个邻近像素,通过对这些像素进行线性插值得到目标位置的像素值。
- 较最邻近插值更平滑,但仍可能引入一些模糊。
双线性插值是一种比最邻近插值更精细的图像插值方法,它考虑了目标位置周围的四个已知像素值,通过线性插值计算目标位置的像素值。下面是双线性插值的详细解释和Python实现示例:
双线性插值算法:
- 目标位置确定: 对于目标位置
(x, y)
,找到其周围四个已知像素的坐标(x1, y1), (x1, y2), (x2, y1), (x2, y2)
。 - 水平方向插值: 在水平方向上对目标位置的像素值进行线性插值。
- 计算水平方向上的权重:
tx = x - x1
。 - 对左右两个已知像素进行线性插值:
pixel_horizontal = pixel1 * (1 - tx) + pixel2 * tx
。
- 计算水平方向上的权重:
- 垂直方向插值: 在垂直方向上对水平插值后的两个像素值进行线性插值。
- 计算垂直方向上的权重:
ty = y - y1
。 - 对上下两个已知像素进行线性插值:
pixel_final = pixel_top * (1 - ty) + pixel_bottom * ty
。
- 计算垂直方向上的权重:
Python实现:
import numpy as np
from PIL import Imagedef bilinear_interpolation(image, new_size):# 输入:image - 原始图像,new_size - 插值后的图像尺寸# 输出:插值后的图像# 获取原始图像尺寸old_size = image.size# 计算尺寸缩放比例scale_x = new_size[0] / old_size[0]scale_y = new_size[1] / old_size[1]# 创建新图像new_image = Image.new("RGB", new_size)for y in range(new_size[1]):for x in range(new_size[0]):# 计算目标位置周围四个已知像素的坐标x1 = int(x / scale_x)y1 = int(y / scale_y)x2 = min(x1 + 1, old_size[0] - 1)y2 = min(y1 + 1, old_size[1] - 1)# 计算水平方向的插值tx = x / scale_x - x1pixel1 = image.getpixel((x1, y))pixel2 = image.getpixel((x2, y))pixel_horizontal = (1 - tx) * pixel1 + tx * pixel2# 计算垂直方向的插值ty = y / scale_y - y1pixel_top = pixel_horizontalpixel_bottom = image.getpixel((x, y2))pixel_final = (1 - ty) * pixel_top + ty * pixel_bottom# 在新图像中设置像素值new_image.putpixel((x, y), tuple(map(int, pixel_final)))return new_image# 示例:加载图像并进行双线性插值
input_image_path = "path/to/your/image.jpg"
output_size = (400, 300)# 打开原始图像
original_image = Image.open(input_image_path)# 进行双线性插值
result_image = bilinear_interpolation(original_image, output_size)# 显示原始图像和插值后的图像
original_image.show(title="Original Image")
result_image.show(title="Bilinear Interpolation Result")
这个示例同样使用了Pillow库(PIL库的一个分支)。确保你已经安装了这个库。替换 input_image_path
为你实际的图像路径。这段代码演示了双线性插值的基本原理和如何在Python中实现。
双三次插值(Bicubic Interpolation):
- 使用更多的邻近像素进行插值,通过对16个邻近像素进行三次插值得到目标位置的像素值。
- 提供更高的插值精度,但计算复杂度也更高。
双三次插值(Bicubic Interpolation)是一种更高阶的图像插值方法,它使用目标位置周围的16个已知像素值进行三次插值,以获得更精确的插值结果。以下是双三次插值的详细解释和Python实现示例:
- 目标位置确定: 对于目标位置
(x, y)
,找到其周围16个已知像素的坐标。 - 水平方向插值:
- 在水平方向上对目标位置的像素值进行三次插值。
- 计算水平方向上的权重:
tx = x - x1
,其中x1
为目标位置(x, y)
的左侧最近的已知像素坐标。 - 对左右两个已知像素进行三次插值,得到水平方向的插值结果。
- 垂直方向插值:
- 在垂直方向上对水平插值后的四个像素值进行三次插值。
- 计算垂直方向上的权重:
ty = y - y1
,其中y1
为水平插值结果的上侧最近的已知像素坐标。 - 对上下两个已知像素进行三次插值,得到最终的插值结果。
Python实现:
import numpy as np
from PIL import Imagedef cubic(x):# 三次插值函数a = -0.5if abs(x) <= 1:return (a + 2) * abs(x)**3 - (a + 3) * abs(x)**2 + 1elif 1 < abs(x) < 2:return a * abs(x)**3 - 5 * a * abs(x)**2 + 8 * a * abs(x) - 4 * aelse:return 0def bicubic_interpolation(image, new_size):# 输入:image - 原始图像,new_size - 插值后的图像尺寸# 输出:插值后的图像# 获取原始图像尺寸old_size = image.size# 计算尺寸缩放比例scale_x = new_size[0] / old_size[0]scale_y = new_size[1] / old_size[1]# 创建新图像new_image = Image.new("RGB", new_size)for y in range(new_size[1]):for x in range(new_size[0]):# 计算目标位置周围16个已知像素的坐标x1 = max(0, int(x / scale_x) - 1)y1 = max(0, int(y / scale_y) - 1)x2 = min(old_size[0] - 1, x1 + 3)y2 = min(old_size[1] - 1, y1 + 3)# 计算水平方向的插值tx = x / scale_x - x1horizontal_values = [cubic(tx + 1 - i) for i in range(4)]pixel_horizontal = np.sum([image.getpixel((x_idx, y)) * horizontal_values[x_idx - x1] for x_idx in range(x1, x2 + 1)], axis=0)# 计算垂直方向的插值ty = y / scale_y - y1vertical_values = [cubic(ty + 1 - j) for j in range(4)]pixel_final = np.sum([pixel_horizontal * vertical_values[y_idx - y1] for y_idx in range(y1, y2 + 1)], axis=0)# 在新图像中设置像素值new_image.putpixel((x, y), tuple(map(int, pixel_final)))return new_image# 示例:加载图像并进行双三次插值
input_image_path = "path/to/your/image.jpg"
output_size = (400, 300)# 打开原始图像
original_image = Image.open(input_image_path)# 进行双三次插值
result_image = bicubic_interpolation(original_image, output_size)# 显示原始图像和插值后的图像
original_image.show(title="Original Image")
result_image.show(title="Bicubic Interpolation Result")
这个示例同样使用了Pillow库。确保你已经安装了这个库。替换 input_image_path
为你实际的图像路径。这段代码演示了双三次插值的基本原理和如何在Python中实现。
拉格朗日插值
- 使用拉格朗日多项式对已知像素值进行插值,根据目标位置与已知像素位置的相对关系计算目标位置的像素值。
- 精度较高,但计算复杂度较高。
拉格朗日插值是一种通过使用拉格朗日多项式来估计目标位置的插值方法。它在已知数据点上构建一个多项式,然后使用该多项式来估计目标位置的值。以下是拉格朗日插值的详细解释和Python实现示例:
- 目标位置确定: 对于目标位置
(x, y)
,找到其周围已知数据点的坐标(x1, y1), (x2, y2), ..., (xn, yn)
。 - 拉格朗日多项式:
- 构建拉格朗日插值多项式:$P(x) = \sum_{i=1}^{n} y_i \prod_{j=1, j \neq i}^{n} \frac{x - x_j}{x_i - x_j} $
- 其中, n n n是已知数据点的数量, x i x_i xi和 y i y_i yi 是第 i i i 个数据点的坐标。
- 插值计算:
- 使用目标位置的 x x x 坐标代入拉格朗日插值多项式,计算得到目标位置的 y y y 坐标。
Python实现:
import numpy as npdef lagrange_interpolation(x, y, target_x):# 输入:x, y - 已知数据点的 x 和 y 坐标,target_x - 目标位置的 x 坐标# 输出:目标位置的 y 坐标(拉格朗日插值结果)n = len(x)result_y = 0.0for i in range(n):term = y[i]for j in range(n):if j != i:term *= (target_x - x[j]) / (x[i] - x[j])result_y += termreturn result_y# 示例:已知数据点进行拉格朗日插值
known_x = [1, 2, 3, 4, 5]
known_y = [2, 1, 3, 5, 4]
target_x = 2.5# 进行拉格朗日插值
result_y = lagrange_interpolation(known_x, known_y, target_x)print(f"对于 x={target_x},使用拉格朗日插值得到的 y={result_y}")
这个示例演示了如何使用拉格朗日插值进行一维数据点的插值。在实际应用中,拉格朗日插值在一些特定场景下可能不如其他插值方法精确,因为随着数据点数量的增加,插值多项式的次数会变得很高,从而引入了一些数值稳定性和计算复杂度的问题。
样条插值算法
- 利用样条函数对图像进行插值,通常使用三次样条插值。
- 提供光滑的插值结果,避免了锯齿状伪影。
选择适当的插值算法通常取决于具体的应用场景和对图像质量的要求。在实际应用中,双线性插值和双三次插值是比较常用的方法。
样条插值是一种使用分段低次多项式连接已知数据点的方法,以获得更平滑的插值结果。在样条插值中,通常使用三次样条函数(cubic splines)。下面是样条插值的详细解释和Python实现示例:
目标位置确定: 对于目标位置 (x, y)
,找到其周围已知数据点的坐标 (x_0, y_0), (x_1, y_1), ..., (x_n, y_n)
。
- 三次样条插值:
- 在每相邻两个已知数据点之间使用三次多项式进行插值。
- 每个区间的三次多项式形式为: S i ( x ) = a i ( x − x i ) 3 + b i ( x − x i ) 2 + c i ( x − x i ) + d i S_i(x) = a_i(x - x_i)^3 + b_i(x - x_i)^2 + c_i(x - x_i) + d_i Si(x)=ai(x−xi)3+bi(x−xi)2+ci(x−xi)+di
- 其中, a i a_i ai, b i b_i bi, c i c_i ci, d i d_i di 是待定系数, x i x_i xi 是该区间的左端点。
- 插值条件:
- 三次样条插值通常要求插值函数在每个已知数据点处的一、二阶导数连续。
- 这产生了一系列的方程,通过求解这些方程获得待定系数。
Python实现:
import numpy as np
from scipy.interpolate import CubicSpline
import matplotlib.pyplot as pltdef cubic_spline_interpolation(x, y):# 输入:x, y - 已知数据点的 x 和 y 坐标# 输出:CubicSpline 插值对象# 使用 scipy 库的 CubicSpline 函数进行三次样条插值spline = CubicSpline(x, y, bc_type='natural') # 'natural' 表示自然边界条件return spline# 示例:已知数据点进行样条插值
known_x = np.array([1, 2, 3, 4, 5])
known_y = np.array([2, 1, 3, 5, 4])# 进行样条插值
spline_interpolation = cubic_spline_interpolation(known_x, known_y)# 绘制插值结果
x_values = np.linspace(min(known_x), max(known_x), 100)
y_values = spline_interpolation(x_values)plt.scatter(known_x, known_y, color='red', label='Known Data Points')
plt.plot(x_values, y_values, label='Cubic Spline Interpolation')
plt.xlabel('x')
plt.ylabel('y')
plt.legend()
plt.show()
在这个示例中,使用了SciPy库中的CubicSpline函数进行三次样条插值。函数的bc_type='natural'
参数表示使用自然边界条件,确保插值函数的二阶导数在端点处为零。替换 known_x
和 known_y
为你实际的数据点,运行代码即可得到样条插值的结果。
相关文章:
数字图像处理:图像内插
图像内插 内插通常在图像放大、缩小旋转和几何校正等任务中使用。内插是用已知数据来估计未知位置的值的过程下面用—个简单的例子开始这—主题的探讨。假设大小为500500像素的—幅图像要放大1.5倍即放大到750750像素。一种简单的放大方法是,创建—个大小为750750像…...
Cantor表(刷题)(C语言)
个人博客主页:https://blog.csdn.net/2301_79293429?typeblog 专栏:https://blog.csdn.net/2301_79293429/category_12545690.html 题目描述 现代数学的著名证明之一是 Georg Cantor 证明了有理数是可枚举的。他是用下面这一张表来证明这一命题的&…...
linux install nvm
官网地址:https://github.com/nvm-sh/nvm 1、wget https://codeload.github.com/nvm-sh/nvm/tar.gz/refs/tags/v0.39.7 tar -zxvf v0.39.7 2、vim ~/.bashrc $HOMEroot export NVM_DIR"$HOME/.nvm" [ -s "$NVM_DIR/nvm.sh" ] && \…...
HTML 炫酷进度条
下面是代码 <!DOCTYPE html> <html><head><meta charset"UTF-8"><title>Light Loader - CodePen</title><style> html, body, div, span, applet, object, iframe, h1, h2, h3, h4, h5, h6, p, blockquote, pre, a, abbr…...
Windows10上使Git Bash支持rsync命令操作步骤
rsync命令是linux上常用的工具之一,用于远程以及本地系统中拷贝/同步文件和文件夹。 Windows Git Bash默认并不支持rsync,如下图所示: 使Git Bash支持rsync命令操作步骤: 1.从https://repo.msys2.org/msys/x86_64/ 下…...
rust for循环里的所有权 - into_iter / iter / iter_mut
文章目录 1 遍历对象实质为 .into_iter() 生成的迭代器2 避免转移 .iter() / .iter_mut()3 for循环里自变量为什么不用加mut // for循环语法糖 for loop_variable in iterator {code() } // 解糖 {let result match IntoIterator::into_iter(iterator) {mut iter > loop {m…...
GitHub README-Template.md - README.md 模板
GitHub README-Template.md - README.md 模板 1. README-Template.md 预览模式2. README-Template.md 编辑模式References A template to make good README.md. https://gist.github.com/PurpleBooth/109311bb0361f32d87a2 1. README-Template.md 预览模式 2. README-Templat…...
【文本到上下文 #6】Word2Vec、GloVe 和 FastText
一、说明 欢迎来到“文本到上下文”博客的第 6 个系列。到目前为止,我们已经探索了自然语言处理的基础知识、应用和挑战。我们深入研究了标记化、文本清理、停用词、词干提取、词形还原、词性标记和命名实体识别。我们的探索包括文本表示技术,如词袋、TF…...
yolov5 opencv dnn部署自己的模型
yolov5 opencv dnn部署自己的模型 github开源代码地址使用github源码结合自己导出的onnx模型推理自己的视频推理条件c部署c 推理结果 github开源代码地址 yolov5官网还提供的dnn、tensorrt推理链接本人使用的opencv c github代码,代码作者非本人,也是上面作者推荐的…...
Cortex-M4处理器 电源管理
Cortex-M4处理器的休眠模式可以降低功耗。 模式可以是以下一种或两种: 休眠模式停止处理器时钟深度睡眠模式停止系统时钟,关闭锁相环和闪存。 如果设备实现了两种提供不同级别省电的睡眠模式,那么SCR的SLEEPDEEP位将选择使用哪种睡眠模式。…...
Linux 驱动开发基础知识——编写LED驱动程序(三)
个人名片: 🦁作者简介:一名喜欢分享和记录学习的在校大学生 🐯个人主页:妄北y 🐧个人QQ:2061314755 🐻个人邮箱:2061314755qq.com 🦉个人WeChat:V…...
YOLOv8 视频识别
YOLOv8 是一种目标检测算法,用于识别视频中的物体。要控制视频识别中的帧,可以通过以下方式来实现: 设置帧率:可以通过设置视频的帧率来控制视频的播放速度,从而影响视频识别的速度。 跳帧处理:可以通过跳…...
elementplus Dialog 对话框设置距离页面顶部的距离
默认为 15vh,当弹窗过于高的时候,这个距离其实是不合适的 <el-dialogv-model"dialogVisible"title"Tips"width"30%":before-close"handleClose"top"6vh"><span>This is a message</s…...
便捷接口调测:API 开发工具大比拼 | 开源专题 No.62
hoppscotch/hoppscotch Stars: 56.1k License: MIT Hoppscotch 是一个开源的 API 开发生态系统,主要功能包括发送请求和获取实时响应。该项目具有以下核心优势: 轻量级:采用简约的 UI 设计。快速:实时发送请求并获得响应。支持多…...
openssl3.2/test/certs - 008 - root-nonca trust variants: +serverAuth +anyEKU
文章目录 openssl3.2/test/certs - 008 - root-nonca trust variants: serverAuth anyEKU概述笔记END openssl3.2/test/certs - 008 - root-nonca trust variants: serverAuth anyEKU 概述 openssl3.2 - 官方demo学习 - test - certs 笔记 // \file my_openssl_win_log_doc…...
cg插画设计行业怎么样,如何学习插画设计
插画设计行业是一个充满创意和艺术性的行业,随着数字化时代的不断发展,cg插画的应用范围越来越广泛,市场需求也在逐年增长。以下是一些关于acg插画设计行业的现状和发展趋势: 市场需求不断增长:随着广告、媒体、影视、…...
1.25学习总结
今天学习了二叉树,了解了二叉树的创建和遍历的过程 今天所了解的遍历过程主要分为三种,前序中序和后序,都是DFS的想法 前序遍历:先输出在遍历左节点和右节点(输出->左->右) 中序遍历:先…...
C语言每日一题(48)回文链表
力扣 234 回文链表 题目描述 给你一个单链表的头节点 head ,请你判断该链表是否为回文链表。如果是,返回 true ;否则,返回 false 。 示例 1: 输入:head [1,2,2,1] 输出:true示例 2࿱…...
提高代码效率的5个Python内存优化技巧
大家好,当项目变得越来越大时,有效地管理计算资源是一个不可避免的需求。Python与C或c等低级语言相比,似乎不够节省内存。 但是其实有许多方法可以显著优化Python程序的内存使用,这些方法可能在实际应用中并没有人注意࿰…...
基于一款热门大屏可视化设计器使用教程
乐吾乐大屏可视化设计器是一个用于创建和定制大屏幕数据可视化展示的工具,支持零代码实现物联网、工业智能制造等领域的可视化大屏、触摸屏端UI以及工控可视化的解决方案。同时也是一个Web组态工具,支持2D、3D等多种形式,用于构建具有实时数据…...
梯度下降法、模拟训练、拟合二次曲线、最小二乘法、MSELoss、拟合:f(x)=ax^2+bx+c
本文目标: 以这个公式为例,设计一个算法,用梯度下降法来模拟训练过程,最终得出参数a,b,c 原理介绍 目标函数: 损失函数:,就是mse 损失函数展开: 损失函数对a,b,c求导数: 导数就是梯度…...
Web3.0投票如何做到公平公正且不泄露个人隐私
在当前的数字时代,社交平台举办投票活动已成为了一种普遍现象。然而,随之而来的是一些隐私和安全方面的顾虑,特别是关于个人信息泄露和电话骚扰的问题。期望建立一个既公平公正又能保护个人隐私的投票系统。Web3.0的出现为实现这一目标提供了…...
灰度图像的自动阈值分割
第一种:Otsu (大津法) 一、基于cv2的API调用 1、代码实现 直接给出相关代码: import cv2 import matplotlib.pylab as pltpath r"D:\Desktop\00aa\1.png" img cv2.imread(path, 0)def main2():ret, thresh1 cv2.…...
利用Maven获取jar包
我有一个习惯,就是程序不在线依赖网络的任何包。以前用C#时候虽然用Nuget找包,但是添加引用后又马上把Nuget引用删了,再把Nuget下载的dll拷贝到工程再引用dll。 这样做的好处是: 1.别人得到程序代码可以直接编译,不用…...
将vue组件发布成npm包
文章目录 前言一、环境准备1.首先最基本的需要安装nodejs,版本推荐 v10 以上,因为需要安装vue-cli2.安装vue-cli 二、初始化项目1.构建项目2.开发组件/加入组件3. 修改配置文件 三、调试1、执行打包命令2、发布本地连接包3、测试项目 四、发布使用1、注册…...
江科大STM32 中
目录 6、TIM(Timer)定时器基本定时器通用定时器高级定时器示例程序(定时器定时中断&定时器外部时钟)TIM输出比较示例程序(PWM驱动LED呼吸灯&PWM驱动舵机&PWM驱动直流电机)TIM输入捕获示例程序&…...
vue+draggable+el-upload上传图片拖拽重排方法
vuedraggableel-upload上传图片拖拽重排方法 1.html <el-row><el-col><el-form-item label"添加视频/图片" prop"device_id"><div class"image-upload"><draggable v-model"fileList" update"dataDr…...
微信的新版canvas绘制的图案发生变形和偏移的问题
一,现象 this.context.beginPath(); this.context.moveTo(10, 10); this.context.lineTo(10, 100); this.context.lineTo(100, 100); this.context.lineTo(100, 10); this.context.lineTo(10, 10); this.context.stroke();本来绘制的是正方形,结果绘制出来是个矩形,边的宽度也…...
[ACM学习] 进制转换
进制的本质 本质是每一位的数位上的数字乘上这一位的权重 将任意进制转换为十进制 原来还很疑惑为什么从高位开始,原来从高位开始的,可以被滚动地乘很多遍。 将十进制转换为任意进制...
redis + 拦截器 :防止数据重复提交
1.项目用到,不是核心 我们干系统开发,不免要考虑一个点,数据的重复提交。 我想我们之前如果要校验数据重复提交要求,会怎么干?会在业务层,对数据库操作,查询数据是否存在,存在就禁止插入数据; 但是吧,我们每次crud操作都会连接…...
网站等比例缩放/seo推广具体做什么
2014年6月17日第一天到新公司上班,挺不习惯,中午时间太短,只有一个小时,中午没有睡觉,下午打不起精神。以后中午吃饭时间得好好调整了,还是得抽出时间午休哦。公司里的水是用自来水消毒的,喝不习…...
企业营销型网站做的好/seo查询外链
重写 什么是重写? 重写就是在子类中对于父类可以继承的方法的重新编写。 重写时父类的返回值与形参不可以改变! 举个例子: public static void main(String[] args) {Child anew Child();a.which();//执行Child的方法Mother b new Mother(…...
长春网站制作招聘信息/苏州seo关键词排名
Oracle 8i中引入了星型转换(star transformation)的优化器新特性以便更有效地处理星型查询。星型查询语句多用于基于星型模型设计的数据仓库应用中。星型模型的称谓源于该种模型以图形化表现时看起来形似一颗海星。这颗星的中央会由一个或多个事实表(fact tables)组成ÿ…...
做网站策划书吧/个人网页制作完整教程
随着城市化不断扩大后相关社会问题的出现,以及减少公共预算需求的日益增加,智慧城市的概念获得了无数关注。据联合国预估报告显示,2018年至2030年间,1000万及以上人口城市的数量预计将从33个增加到43个。而由于人口和工业的集中&a…...
精品手机网站案例/营销网店推广的软文
iOS storyboard 和 xib布局细节,intrinsicContentSize和contentHuggingPriority等的作用 文章出自我的博客:huhansome的博客 不得不说在平常的iOS开发中,我们依赖了太多的三方库,导致Apple自身的东西或多或少的有些生疏…...
做网站的文章/百度提升优化
内存分配策略 按照编译原理的观点,程序运行时的内存分配有三种策略,分别是静态的,栈式的,和堆式的. 静态存储分配是指在编译时就能确定每个数据目标在运行时刻的存储空间需求,因而在编译时就可以给他们分配固定的内存空间.这种分配策略要求程序代码中不允许有可变数据结构(…...