Skip to content

Instantly share code, notes, and snippets.

Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save KdotJPG/ba934dd506ccfb9477d441914debe8a6 to your computer and use it in GitHub Desktop.
Save KdotJPG/ba934dd506ccfb9477d441914debe8a6 to your computer and use it in GitHub Desktop.
不要授予专利“用于转换数字图像的方法” CN110264409A CN201910160651.XA
I cannot find the Web Link to submit Prior Art against a patent application in China. So the best that I can do is post this,
and hope that the patent examiner in China will find it.
Keywords: noise vertex lattice simplex image parameter novaquark range quadrangle quadrilateral non-local gradient matrix
我找不到该Web链接来提交针对中国专利申请的现有技术。 因此,我能做的最好的就是发布这篇文章,并希望中国的专利审查员能够找到它。
关键字:噪声,顶点,晶格,单纯形,图像,参数,novaquark,范围,四边形,非局部,梯度,矩阵
Note to others who read this: I have heard recommendations not to review unexpired patents without a lawyer present. Take from that what you will (not legal advice).
请注意以下几点:我听说有人建议不要在没有律师的情况下检查未过期的专利。这是我听到的 (这不是法律建议)。
Link: https://patents.google.com/patent/CN110264409A/en
---------------
Keyphrases 关键短语:
"method for transforming a digital image"
"applying a procedural noise onto a parameter of an image element"
"determining a range of the lattice of the noise"
"a contribution depending on the gradient value"
"the gradient G(S) of each vertex S is computed only once"
“种用于转换数字图像的方法”
“包括将过程噪声施加到该数字图像的图像元素的参数上”
“确定该噪声的晶格的范围”
“确定梯度值作为伪随机值”
“取决于梯度值的贡献”
“因为每个顶点S的梯度G(S)只计算一次”
Prior Art 当前技术
“The Reddit Post” (Comment that begins with “Have you considered an alternate approach?...”)
“Reddit Post” (以“Have you considered an alternate approach?...”开头的评论)
https://old.reddit.com/r/VoxelGameDev/comments/2yud19/latest_build_of_my_upcoming_voxel_game_fugl_for/cpd1dpd/
https://ceddit.com/r/VoxelGameDev/comments/2yud19/latest_build_of_my_upcoming_voxel_game_fugl_for/cpd1dpd/
March 14, 2015
-----------------------------------------------------------------------------------------------------------------------------------
References 引文
"Simplex Noise Demystified"
http://staffwww.itn.liu.se/~stegu/simplexnoise/simplexnoise.pdf
March 22, 2005
“Accidental Noise Library”
http://accidentalnoise.sourceforge.net/
http://accidentalnoise.sourceforge.net/implicit.html
https://web.archive.org/web/20111024144910/http://accidentalnoise.sourceforge.net/index.html
https://web.archive.org/web/20111024144905/http://accidentalnoise.sourceforge.net/implicit.html
Webarchive from 2011
“Modifications to Classic Perlin Noise”
https://briansharpe.wordpress.com/2012/03/09/modifications-to-classic-perlin-noise/
https://web.archive.org/web/20160909221643/https://briansharpe.wordpress.com/2012/03/09/modifications-to-classic-perlin-noise/
Post from March 9, 2012. Webarchive from 2016.
“Some Linear Algebra”
http://math.hws.edu/graphicsbook/c3/s5.html
https://web.archive.org/web/20160305115541/http://math.hws.edu/graphicsbook/c3/s5.html
Webarchive from 2016
“Linear Algebra (CS123)”
https://cs.brown.edu/courses/cs123/docs/helpsessions/linearalgebra.pdf
https://web.archive.org/web/20180417040118/https://cs.brown.edu/courses/cs123/docs/helpsessions/linearalgebra.pdf
Webarchive from 2018
“Noise Hardware”
https://www.csee.umbc.edu/~olano/s2002c36/ch02.pdf
2002
CLAIM 1 专利权利要求1
“Reddit Post”描述了一种生成过程噪声的方法,该过程遵循与权利要求1极为相似的过程。特别是,第一个项目符号点描述了枚举“至少但不超过”所需的晶格点。
第一个要点将其描述为生成Simplex或OpenSimplex噪声的解决方案。单工噪声坐标系是本领域已知的。第5和6页上的“Simplex Noise Demystified”
显示了两个数字,它们表示2D单纯形噪声的偏斜四边形“范围”。本文没有使用数字描述选择足够大以适合图像的范围
但是它确实使用它们来解释传统算法在单纯形网格的非局部布局的上下文中的局部行为。第6页上的图还显示了相对于相应的正方形网格,
单形格坐标中X:[0,4] Y:[0,4]的范围是如何成形的。对于程序员来说,在这些坐标上实现“嵌套循环”将很简单。注意:与该图相比,
专利图1中的域或噪声晶格旋转了。域旋转在权利要求10的条目中进行了介绍,并且在数学上等效于重新定向噪声晶格。
“Reddit Post”描述了三个维度的实现。但是众所周知,单纯形噪声可以推广到其他数量的尺寸。
“从插值到求和移动”下第5页的“单纯形噪声的神秘化”描述了函数如何缩放到更高的维度。第11-16页显示了噪声的2D,3D,和4D实现的代码。
---------------
“Reddit Post”中的第二个要点描述了将每个晶格点的贡献应用于周围范围。帖子中的第五个要点讨论了根据晶格点的坐标选择的渐变。
第一个要点将方法描述为生成单纯形或OpenSimplex噪声的解决方案。
“Simplex Noise Demystified”第2页第二段介绍了如何选择Perlin噪声的梯度作为伪随机。本文在第8-16页的代码注释(//)中包含
“gradient”一词的代码中显示了使用相同的梯度选择器实现的Perlin噪声和Simplex噪声。
-----------------------------------------------------------------------------------------------------------------------------------
CLAIM 2 专利权利要求2
有关权利要求1的要素B,请参见上面的条目。“Simplex Noise Demystified”在第4页第2段中进一步阐明,梯度决策仅取决于噪声晶格顶点。
-----------------------------------------------------------------------------------------------------------------------------------
CLAIMS 3,4 专利权利要求3,4
“Reddit Post”在生成人工景观的背景下描述了该方法。参见“背景技术”下专利中的第二段,该段将人造景观称为几何参数。
请参阅上述三个步骤的注释The Reddit Post,其中讨论了3D噪波如何与2D “heightfield” (的高度图)一起工作。
众所周知,噪声有许多用途。 “Accidental Noise Library”,在“Introduction”标题第二段下的主页上,将“Perlin and [other noise]”
描述为具有广泛的应用程序,包括(1)纹理化 “texturing”,(2)生成世界和 “generating worlds”(3)生成几何体 “generating geometry”。
第1款明确描述了输出颜色数据的功能。 “ CImplicitBasisFunction”下的“隐式模块”页面同时显示Perlin(“ GRADIENT”)和Simplex选项。第1页的
“Simplex Noise Demystified”,介绍了Simplex噪声作为Perlin的替代品。
-----------------------------------------------------------------------------------------------------------------------------------
CLAIM 5 专利权利要求5
“Reddit Post”中的第一个要点描述了此方法,作为生成Simplex或OpenSimplex噪声的解决方案。第二个项目符号点描述了一个球体,
其半径包围了噪点的点(顶点)。
第5页上的“Simplex Noise Demystified”描述了一系列径向对称的贡献,这些贡献在网格单元边界处停止并应用。它还描述了它适用于其他尺寸,
而不仅仅是3D。
-----------------------------------------------------------------------------------------------------------------------------------
CLAIM 6 专利权利要求6
“Reddit Post”中的第一个项目符号将其描述为生成Simplex或OpenSimplex噪声的解决方案。
“Simplex Noise Demystified ”阐明了有关Simplex噪声的详细信息。
第11-16页的“ Simplex Noise Demystified”,包含“计算贡献”的注释附近的代码(//)揭示了
"(gx * x + gy * y + ...) * max(0, r^2 - x^2 - y^2 - ...)^4"的计算,其中"r^2"是半径平方的常数。
"max"函数是使用if语句实现的。完整函数在邻域外为零,并且其衰减分量"max(0, r^2 - x^2 - y^2 - ...)^4"随着其内距离的增加而减小。
-----------------------------------------------------------------------------------------------------------------------------------
CLAIM 7 专利权利要求7
有关权利要求6,请参见上面的条目。对于任何输入坐标(x,y,z等),当距离等于半径时,此函数的导数为零。
-----------------------------------------------------------------------------------------------------------------------------------
CLAIMS 8,9 专利权利要求8,9
帖子中的第一个要点描述了它作为生成Simplex或OpenSimplex噪声的解决方案。 “ Simplex Noise Demystified”涵盖了Perlin和Simplex之间的这些差异。
Perlin噪声不需要"skew"/"unskew"步骤。第4页上的“Simplex Grid”标题下的2D情况描述,其中Simplex噪点使用三角形网格,而Perlin噪点使用方形网格。
第8-9页的3D Perlin噪声代码显示了使用具有三次元素的单位网格,与第11-15页的注释(//)附近的单纯形噪声相比,
第8-9页中的3D Perlin噪声代码显示了使用带有立方体单元的单位网格,与第11-15页的靠近注释的“simplex”噪声相比,
省略了“skew”和“unskew”变换步骤。其中包含“歪斜”和“歪斜”字样。您可以将“ Reddit Post”中描述的方法扩展到Perlin噪声网格,
只需省略这些步骤,然后执行其余的描述方法。
第2页引入了一种不同的基于插值的方法来组合Perlin噪声中的周围点,
而不是第5页的“From interpolation to summation”中介绍的用于单纯形噪声的径向对称核。
您可以研究第8-9页的代码来模拟插值并将每个顶点的角色隔离成自己的功能。但是该专利的图2显示了一个圆形的贡献范围,
这可能表明他们正在使用带有Simplex噪声贡献公式的Perlin噪声网格。如“Classic Perlin Surflet Noise”标题下的
“Modifications to Classic Perlin Noise”所示,这并不是什么新鲜事物。
-----------------------------------------------------------------------------------------------------------------------------------
CLAIM 10 专利权利要求10
在第11-14页的“ Simplex Noise Demystified”中,注释(//)附近带有关键字“ skew”和“ unskew”的代码段计算线性变换
(请参见第16页的“Noise Hardware”,第1步),执行传统噪声评估器中的权利要求10的功能–缺少用户定义的变换,
这些变换事先针对图像空间进行旋转或缩放,并且在进行逆(偏斜)操作后需要撤消这些变换。这些可以算作包含在此声明的定义中,
也可以单独计算。如果将它们包括在内,它们是一个简单的扩展。
在计算机图形学领域,使用矩阵和矩阵乘法(“线性应用”)来表示线性变换非常普遍。众所周知,它们在几何上完成什么,在数学上表示什么。
文章“Some Linear Algebra”将线性代数描述为计算机图形学的基础(第1段),并显示了矩阵与非矩阵方程方程的关系
(在“Matrices and Transformation”标题下)。文章“Linear Algebra (CS123)”将矩阵乘法与标准方程式相关联(如第22页所标记),
并显示了偏斜基础的可视化(如所标记的第26-27页)。
在“ Reddit Post”中主要关注的注释上方的两个注释讨论了生成噪声的“八度”(octaves)。已知“八度”(octaves)的频率常数乘以每个坐标。
在五个图像下方的“Implicit Modules”的“Accidental Noise Library”页面中,标题为“CImplicitFractal”。
“CImplicitRotateDomain”和“CImplicitScaleDomain”部分显示了更多现有工具,这些工具可在输入域上计算旋转和缩放变换,以用于程序噪声。
数学事实:
- 这些固定的旋转和缩放比例本质上是线性变换。
- 如果连续评估了两个线性变换,则它们将计算代表这两者组成的新线性变换的结果(例如,由频率缩放和单纯形偏斜变换组成的变换本质上是线性的)。
- 如果线性变换是可逆的,则计算逆函数(即,如果具有“ A到B”变换,则将“ B到A”变换)是简单明了的。逆也是线性的。
- 可以不使用线性代数概念来执行旋转或缩放操作:通过反转角度(如果以此定义)进行旋转,通过除以之前乘以的值进行缩放。
在传统的噪声评估中,将两者结合起来的正向变换实际上已经发生。必要时,逆向变换仅需要程序员理解在“skew”之后应用自己的逆变换(逆“skew”)即可。
为了清楚起见,在主要关注注释下方的注释中讨论的“warp[ing] the domain”(扭曲域)不一定在此类别中。 “Accidental Noise Library”页面底部的
“意外噪声库”讨论了如何使用噪声输出来更改另一噪声副本的输入坐标。
Claim 1 Element A
“The Reddit Post” describes a method for generating procedural noise, that follows a very similar process to the one that Claim 1 does. In particular, the first bullet point describes enumerating “at least but not too much more than” the needed lattice points.
The first bullet point characterizes it as a solution to generate Simplex or OpenSimplex noise. The simplex noise coordinate system is known in the art. “Simplex Noise Demystified”, on pages 5 and 6, displays two figures that illustrate a skewed quadrilateral “range” of 2D Simplex noise. The article does not use the figures to describe choosing a range big enough to fit an image. But it does use them to explain the local behavior of the traditional algorithm in the context of the non-local layout of the simplex grid. The figure on Page 6 also shows how a range of X:[0, 4] Y:[0, 4] in Simplex lattice coordinates is shaped, in relation to the corresponding square grid. It would be straightforward for a programmer to implement a “nested for-loop” on these coordinates. Note: Compared to this figure, the domain or noise lattice in patent drawing 1 is rotated. Domain rotation is covered in the Claim 10 entry, and is mathematically equivalent to re-orienting the noise lattice.
“The Reddit Post” describes the implementation for three dimensions. But Simplex noise is known to be generalizable to other numbers of dimensions. "Simplex Noise Demystified" page 5 under 'Moving from interpolation to summation' describes how the function scales to higher dimensions. Pages 11-16 show code for 2D, 3D, and 4D implementations of the noise.
Claim 1 Element B
The second bullet point in “The Reddit Post” describes applying the contribution of each lattice point to a surrounding range. The fifth bullet point in the post discusses a gradient that is chosen based on the coordinate of the lattice point.
The first bullet point characterizes the method as a solution to generate Simplex or OpenSimplex noise. “Simplex Noise Demystified” page 2 second paragraph, describes choosing the gradient for Perlin noise as pseudo-random. The article shows both Perlin noise and Simplex noise implemented using the same gradient selector, in code on pages 8-16 near code comments (//) containing the word “gradient”.
Claim 2
See the table entry above, for Claim 1 Element B. “Simplex Noise Demystified” clarifies further, in page 4 paragraph 2, that the gradient decision depends only on the noise lattice vertex.
Claims 3, 4
“The Reddit Post” describes the method in context of generating an artificial landscape. See second paragraph in patent under 'Background of the Invention' that refers to an artificial landscape as geometric. See the comment three levels up on “The Reddit Post”, which discusses how 3D noise works with a 2D “heightfield” (altitude map).
Noise is widely known to have many uses. “Accidental Noise Library”, Main Page under 'Introduction' header second paragraph, describes “Perlin and [other noise]” as having a wide variety of applications including (1) texturing, (2) generating worlds, and (3) generating geometry. Paragraph 1 expressly describes a feature that outputs color data. The Implicit Modules page, under 'CImplicitBasisFunction', shows both Perlin (“GRADIENT”) and Simplex options. “Simplex Noise Demystified” top of page 1, describes Simplex noise as a replacement for Perlin.
Claim 5
The first bullet point in “The Reddit Post” characterizes the method as a solution to generate Simplex or OpenSimplex noise. The second bullet point describes a sphere/ball of some radius that is centered around the noise lattice vertex.
“Simplex Noise Demystified”, page 5 under heading 'Moving from interpolation to summation' describes a radially-symmetric contribution range that stops at the boundary of the grid cell, as a dimensionally-generalized concept.
Claim 6
The first bullet point in “The Reddit Post” characterizes it as a solution to generate Simplex or OpenSimplex noise. “Simplex Noise Demystified” clarifies details for Simplex noise.
“Simplex Noise Demystified”, pages 11-16, code near comments (//) containing “calculate the contribution”, reveals a computation of "(gx * x + gy * y + ...) * max(0, r^2 - x^2 - y^2 - ...)^4" where "r^2" is the squared radius constant. The "max" function is implemented using if-statements. The full function is null outside the neighborhood, and its attenuation component "max(0, r^2 - x^2 - y^2 - ...)^4" decreases for any increase in distance within it.
Claim 7
See the table entry above, for Claim 6. The derivative of this function, with respect to any input coordinate (x, y, z, etc.), evaluates to zero when the distance equals the radius.
Claims 8,9
The first bullet point in the post characterizes it as a solution to generate Simplex or OpenSimplex noise. “Simplex Noise Demystified” covers these differences between Perlin and Simplex.
Perlin noise doesn't need the skew/unskew steps. Page 4 under heading 'Simplex grids' remarks for the 2D case that Simplex noise uses a triangular grid, and Perlin noise uses a square grid. The 3D Perlin noise code in pages 8-9 shows the use of a unit grid with cube cells, where the skew and unskew transformation steps are omitted compared to Simplex noise on pages 11-15 near comments (//) containing the words “skew” and “unskew”. The method described in “The Reddit Post” can be extended to the grid of Perlin noise by simply omitting these steps and executing the rest of the method as described.
Page 2 covers a different, interpolation-based method of combining surrounding points in Perlin noise, instead of the radially-symmetric kernels it describes for Simplex noise, on Page 5 under 'Moving from interpolation to summation'. Mimicking the interpolation might be possible by studying the code on Pages 8-9, and isolating the contribution of each vertex into its own function. But drawing 2 of the patent shows a circular contribution range, which might indicate that they are using the Perlin noise grid with the Simplex noise contribution formula. This is not new either, as it has been demonstrated in "Modifications to Classic Perlin Noise" under heading 'Classic Perlin Surflet Noise'.
Claim 10
In “Simplex Noise Demystified”, pages 11-14, the code sections near comments (//) with keywords “skew” and “unskew” compute linear transforms (see “Noise Hardware” page 16 as marked, step 1) that perform the function of Claim 10 in the traditional noise evaluators – short of user-defined transforms that rotate or scale for the image space beforehand, and something to undo them following the inverse (unskew) operation. These might be counted as included in this claim's definition, or separate. If they are included, they are a trivial extension.
The use of matrices and matrix multiplications (linear “applications”) to represent linear transforms, is incredibly common in the field of Computer Graphics. It is well known what they accomplish geometrically, and what they represent mathematically. The article “Some Linear Algebra” describes Linear Algebra as fundamental to Computer Graphics (paragraph 1), and it shows how matrices relate to non-matrix equations equations (under heading 'Matrices and Transformations'). The article “Linear Algebra (CS123)” relates matrix multiplication to standard equations (page 22 as marked) and shows a visualization of a skewed basis (pages 26-27 as marked).
The two comments above the comment of primary focus in “The Reddit Post” discuss generating octaves of noise. Octaves are known to have a frequency constant that is multiplied by each coordinate. “Accidental Noise Library”, 'Implicit Modules' page, heading 'CImplicitFractal', below the five images, discusses this. Sections 'CImplicitRotateDomain' and 'CImplicitScaleDomain' show more existing tools, which compute rotation and scaling transforms on the input domain, for use with procedural noise.
Mathematical facts to consider:
- These fixed rotations and scalings are inherently linear transforms.
- If two linear transforms are evaluated successively, they compute the result of a new linear transform representing a composition of the two (e.g. a transform consisting of a frequency scaling leading into a Simplex skew transform is inherently linear).
- If a linear transform is invertible, then computing the inverse (i.e. getting the “B to A” transform if you have the “A to B” transform), is straightforward and well-defined. The inverse is also linear.
- Undoing a rotation or scaling can be performed without using Linear Algebra concepts: rotation by reversing the angle (if defined with such), scaling by dividing by what you multiplied by before.
- The forward transform, as a combination of the two, effectively already occurs in traditional noise evaluations. The reverse transform only needs the programmer to understand to apply the inverse of their own transform after the unskew (inverse skew) if necessary.
For clarity, “warp[ing] the domain” discussed in the comment below the primary focus comment, is not necessarily in this category. “Accidental Noise Library” bottom of the 'Implicit Modules' page, discusses using the output of noise to vary the input coordinates of another copy of noise.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment