@mlikiowa/nanaeo 1.0.1702966759079 → 1.0.1702967739786

Sign up to get free protection for your applications and to get access to all the features.
Files changed (59) hide show
  1. package/2022/08/04/NewBlog/index.html +3473 -0
  2. package/2022/08/13/GaussWave/index.html +3407 -0
  3. package/about/index.html +3236 -0
  4. package/archives/2022/08/index.html +3411 -0
  5. package/archives/2022/index.html +3411 -0
  6. package/archives/index.html +3308 -0
  7. package/asset/Sotheby.ttf +0 -0
  8. package/asset/backimg.png +0 -0
  9. package/atom.xml +171 -0
  10. package/categories/DevLog/index.html +3351 -0
  11. package/categories/SiteLog/index.html +3351 -0
  12. package/categories/index.html +3174 -0
  13. package/category/devlog/atom.xml +58 -0
  14. package/category/devlog/feed.json +19 -0
  15. package/category/devlog/rss.xml +62 -0
  16. package/category/sitelog/atom.xml +125 -0
  17. package/category/sitelog/feed.json +20 -0
  18. package/category/sitelog/rss.xml +129 -0
  19. package/content.json +1 -0
  20. package/css/Readme.html +9 -0
  21. package/css/first.css +1504 -0
  22. package/css/style.css +7106 -0
  23. package/favicon.ico +0 -0
  24. package/feed.json +31 -0
  25. package/friends/index.html +3661 -0
  26. package/index.html +3421 -0
  27. package/js/app.js +1223 -0
  28. package/js/plugins/aplayer.js +186 -0
  29. package/js/plugins/parallax.js +191 -0
  30. package/js/plugins/rightMenu.js +577 -0
  31. package/js/plugins/rightMenus.js +618 -0
  32. package/js/plugins/tags/contributors.js +92 -0
  33. package/js/plugins/tags/friends.js +93 -0
  34. package/js/plugins/tags/sites.js +96 -0
  35. package/js/search/hexo.js +192 -0
  36. package/package.json +1 -1
  37. package/rss.xml +175 -0
  38. package/tag/devlog/atom.xml +58 -0
  39. package/tag/devlog/feed.json +19 -0
  40. package/tag/devlog/rss.xml +62 -0
  41. package/tag/gauss/atom.xml +58 -0
  42. package/tag/gauss/feed.json +19 -0
  43. package/tag/gauss/rss.xml +62 -0
  44. package/tag/hexo/atom.xml +125 -0
  45. package/tag/hexo/feed.json +20 -0
  46. package/tag/hexo/rss.xml +129 -0
  47. package/tag/hexothemes/atom.xml +125 -0
  48. package/tag/hexothemes/feed.json +20 -0
  49. package/tag/hexothemes/rss.xml +129 -0
  50. package/tag/sitelog/atom.xml +125 -0
  51. package/tag/sitelog/feed.json +20 -0
  52. package/tag/sitelog/rss.xml +129 -0
  53. package/tags/DevLog/index.html +3351 -0
  54. package/tags/Gauss/index.html +3351 -0
  55. package/tags/Hexo/index.html +3351 -0
  56. package/tags/HexoThemes/index.html +3351 -0
  57. package/tags/SiteLog/index.html +3351 -0
  58. package/tags/index.html +3159 -0
  59. package/volantis-sw.js +797 -0
package/rss.xml ADDED
@@ -0,0 +1,175 @@
1
+ <?xml version="1.0"?>
2
+ <rss version="2.0">
3
+ <channel>
4
+ <title>Village</title>
5
+ <link>https://nanaeo.cn</link>
6
+ <description>It is a little blog~</description>
7
+ <language>zh-CN,en,default</language>
8
+ <pubDate>Sat, 13 Aug 2022 16:00:00 +0000</pubDate>
9
+ <lastBuildDate>Sat, 13 Aug 2022 16:00:00 +0000</lastBuildDate>
10
+ <category>DevLog</category>
11
+ <category>Gauss</category>
12
+ <category>SiteLog</category>
13
+ <category>HexoThemes</category>
14
+ <category>Hexo</category>
15
+ <item>
16
+ <guid isPermalink="true">https://nanaeo.cn/2022/08/13/GaussWave/</guid>
17
+ <title>高斯滤波</title>
18
+ <link>https://nanaeo.cn/2022/08/13/GaussWave/</link>
19
+ <category>DevLog</category>
20
+ <category>Gauss</category>
21
+ <pubDate>Sat, 13 Aug 2022 16:00:00 +0000</pubDate>
22
+ <description><![CDATA[ &lt;p&gt;高斯滤波的实现&lt;/p&gt;
23
+ &lt;span id=&#34;more&#34;&gt;&lt;/span&gt;
24
+
25
+ &lt;div class=&#34;story post-story&#34;&gt;&lt;h2 id=&#34;本文提示&#34;&gt;&lt;a href=&#34;#本文提示&#34; class=&#34;headerlink&#34; title=&#34;本文提示&#34;&gt;&lt;/a&gt;本文提示&lt;/h2&gt;&lt;p&gt;本文提供了相关代码和算法仅为示例学习,并非标准案例,并且OpenCV提供了高斯滤波函数,如果遇到不明白的概念和地方可以参考引用文章理解,也可以尝试在搜索引擎上搜索相关概念和图片示例,由于本站资源原因,暂不提供图片。&lt;/p&gt;
26
+ &lt;p&gt;tips: 本文为了方便仅是灰度图片处理&lt;br&gt;如果需要彩色图片应该尝试修改代码三种通道进行分别处理或其它方法。&lt;/p&gt;
27
+ &lt;/div&gt;&lt;div class=&#34;story post-story&#34;&gt;&lt;h2 id=&#34;概念理解-部分来自百科等&#34;&gt;&lt;a href=&#34;#概念理解-部分来自百科等&#34; class=&#34;headerlink&#34; title=&#34;概念理解(部分来自百科等)&#34;&gt;&lt;/a&gt;概念理解(部分来自百科等)&lt;/h2&gt;&lt;h3 id=&#34;滤波&#34;&gt;&lt;a href=&#34;#滤波&#34; class=&#34;headerlink&#34; title=&#34;滤波&#34;&gt;&lt;/a&gt;滤波&lt;/h3&gt;&lt;p&gt;滤波就对图像像素点及其邻域点的灰度值按照一定的参数规则进行加权平均,可以有效滤去理想图像中叠加的高频噪声。常用的滤波有线性滤波、中值滤波、均值滤波、双边滤波、高斯滤波等。滤波有抑制噪声的作用,但这会使得图像边缘模糊。(摘自别的地方)&lt;/p&gt;
28
+ &lt;h3 id=&#34;低通滤波&#34;&gt;&lt;a href=&#34;#低通滤波&#34; class=&#34;headerlink&#34; title=&#34;低通滤波&#34;&gt;&lt;/a&gt;低通滤波&lt;/h3&gt;&lt;p&gt;低通滤波是一种过滤方式,规则为低频信号能正常通过,而超过设定临界值的高频信号则被阻隔、减弱,图像处理领域可用来模糊。&lt;/p&gt;
29
+ &lt;h3 id=&#34;高通滤波&#34;&gt;&lt;a href=&#34;#高通滤波&#34; class=&#34;headerlink&#34; title=&#34;高通滤波&#34;&gt;&lt;/a&gt;高通滤波&lt;/h3&gt;&lt;p&gt;高通滤波(high-pass filter) 是一种过滤方式,规则为高频信号能正常通过,而低于设定临界值的低频信号则被阻隔、减弱。但是阻隔、减弱的幅度则会依据不同的频率以及不同的滤波程序(目的)而改变,图像处理领域可用于锐化。&lt;/p&gt;
30
+ &lt;h3 id=&#34;高斯滤波&#34;&gt;&lt;a href=&#34;#高斯滤波&#34; class=&#34;headerlink&#34; title=&#34;高斯滤波&#34;&gt;&lt;/a&gt;高斯滤波&lt;/h3&gt;&lt;p&gt;高斯滤波是一种线性平滑滤波,适用于消除高斯噪声,广泛应用于图像处理的减噪过程,对处理呈现正态分布(高斯分布)的噪声(包括图像噪声)效果显著。&lt;br&gt;tips: 常用高斯模糊就是使用高斯滤波完成的, 高斯模糊是低通滤波的一种, 也就是滤波函数是低通高斯函数, 但是高斯滤波是指用高斯函数作为滤波函数, 至于是不是模糊,要看是高斯低通还是高斯高通, 低通就是模糊, 高通就是锐化。&lt;/p&gt;
31
+ &lt;h3 id=&#34;核算子、模板、结构都是一种&#34;&gt;&lt;a href=&#34;#核算子、模板、结构都是一种&#34; class=&#34;headerlink&#34; title=&#34;核算子、模板、结构都是一种&#34;&gt;&lt;/a&gt;核算子、模板、结构都是一种&lt;/h3&gt;&lt;p&gt;当我们进行图像处理时时,使用到的权用一个矩阵表示,可以利用该矩阵计算对应像素,同时我们叫这个矩阵为核算子、模板、结构。(示例见前提指明)&lt;br&gt;大小可小可大,并且一般为奇数,&lt;br&gt;Que:核大小为什么是都是类似3×3&amp;#x2F;5×5 奇数呢?&lt;br&gt;其中一个原因是定位中心锚点,偶数是无法确定中心点的。&lt;/p&gt;
32
+ &lt;h3 id=&#34;滤波核&#34;&gt;&lt;a href=&#34;#滤波核&#34; class=&#34;headerlink&#34; title=&#34;滤波核&#34;&gt;&lt;/a&gt;滤波核&lt;/h3&gt;&lt;p&gt;当进行滤波时,里面是核的内容是权重并且可以用于处理像素,那么该核称为滤波核。&lt;br&gt;(通俗解释 专业解释 请查询资料)&lt;/p&gt;
33
+ &lt;h3 id=&#34;归一化&#34;&gt;&lt;a href=&#34;#归一化&#34; class=&#34;headerlink&#34; title=&#34;归一化&#34;&gt;&lt;/a&gt;归一化&lt;/h3&gt;&lt;p&gt;就是生成核或者说模板加起来的权不为一,这时候我们核内每一个值除以核内总值,就实现了归一化。&lt;/p&gt;
34
+ &lt;h3 id=&#34;卷积核&#34;&gt;&lt;a href=&#34;#卷积核&#34; class=&#34;headerlink&#34; title=&#34;卷积核&#34;&gt;&lt;/a&gt;卷积核&lt;/h3&gt;&lt;p&gt;如果一个核被用于卷积那么该核也可以被称为卷积核。(通俗解释 专业解释 请查询资料)&lt;/p&gt;
35
+ &lt;h3 id=&#34;高斯核&#34;&gt;&lt;a href=&#34;#高斯核&#34; class=&#34;headerlink&#34; title=&#34;高斯核&#34;&gt;&lt;/a&gt;高斯核&lt;/h3&gt;&lt;p&gt;那么高斯核固然就是高斯分布生成的核了&lt;/p&gt;
36
+ &lt;/div&gt;&lt;div class=&#34;story post-story&#34;&gt;&lt;h2 id=&#34;环境与依赖&#34;&gt;&lt;a href=&#34;#环境与依赖&#34; class=&#34;headerlink&#34; title=&#34;环境与依赖&#34;&gt;&lt;/a&gt;环境与依赖&lt;/h2&gt;&lt;p&gt;Python 本次使用的编程语言&lt;br&gt;OpenCV 跨平台计算机视觉库&lt;br&gt;Windows11 本文中代码运行系统&lt;/p&gt;
37
+ &lt;h3 id=&#34;OpenCv库安装&#34;&gt;&lt;a href=&#34;#OpenCv库安装&#34; class=&#34;headerlink&#34; title=&#34;OpenCv库安装&#34;&gt;&lt;/a&gt;OpenCv库安装&lt;/h3&gt;&lt;p&gt;(清华源 可自行切换)&lt;/p&gt;
38
+ &lt;figure class=&#34;highlight plaintext&#34;&gt;&lt;table&gt;&lt;tr&gt;&lt;td class=&#34;gutter&#34;&gt;&lt;pre&gt;&lt;span class=&#34;line&#34;&gt;1&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;2&lt;/span&gt;&lt;br&gt;&lt;/pre&gt;&lt;/td&gt;&lt;td class=&#34;code&#34;&gt;&lt;pre&gt;&lt;span class=&#34;line&#34;&gt;pip install opencv-python -i https://pypi.tuna.tsinghua.edu.cn/simple opencv-python&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;pip install opencv-contrib-python -i https://pypi.tuna.tsinghua.edu.cn/simple opencv-python&lt;/span&gt;&lt;br&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/figure&gt;
39
+ &lt;/div&gt;&lt;div class=&#34;story post-story&#34;&gt;&lt;h2 id=&#34;举例&#34;&gt;&lt;a href=&#34;#举例&#34; class=&#34;headerlink&#34; title=&#34;举例&#34;&gt;&lt;/a&gt;举例&lt;/h2&gt;&lt;p&gt;最终滤波核示例 (提示:权请保证和为1 此处已经归一化 但并非真实情况)&lt;br&gt;0.1 0.1 0.2&lt;br&gt;0.1 0.1 0.1&lt;br&gt;0.1 0.1 0.1&lt;/p&gt;
40
+ &lt;p&gt;为3×3网格坐标结构&lt;br&gt;该模板大小 3×3&lt;/p&gt;
41
+ &lt;/div&gt;&lt;div class=&#34;story post-story&#34;&gt;&lt;h2 id=&#34;算法过程&#34;&gt;&lt;a href=&#34;#算法过程&#34; class=&#34;headerlink&#34; title=&#34;算法过程&#34;&gt;&lt;/a&gt;算法过程&lt;/h2&gt;&lt;h3 id=&#34;高斯滤波实现方法&#34;&gt;&lt;a href=&#34;#高斯滤波实现方法&#34; class=&#34;headerlink&#34; title=&#34;高斯滤波实现方法&#34;&gt;&lt;/a&gt;高斯滤波实现方法&lt;/h3&gt;&lt;p&gt;看完以上相信各位并没有很多理解,并不要紧,联系实际我们进一步进行&lt;br&gt;高斯滤波通常情况下有两种实现方式,一是用离散化窗口滑窗卷积, 另一种通过傅里叶变换,其中第一种毕竟常见,可能这时候有人又问了,这又是什么,别急,咱先慢慢来,离散化窗口滑窗卷积其实就是进行有限次的移动核运算区域的卷积运算,那么我们可以开始了。&lt;/p&gt;
42
+ &lt;h3 id=&#34;算法过程-1&#34;&gt;&lt;a href=&#34;#算法过程-1&#34; class=&#34;headerlink&#34; title=&#34;算法过程&#34;&gt;&lt;/a&gt;算法过程&lt;/h3&gt;&lt;p&gt;0.图像灰度处理 (为了方便)&lt;/p&gt;
43
+ &lt;ol&gt;
44
+ &lt;li&gt;生成滤波核&lt;/li&gt;
45
+ &lt;li&gt;进行卷积处理图像&lt;/li&gt;
46
+ &lt;/ol&gt;
47
+ &lt;h3 id=&#34;生成滤波核&#34;&gt;&lt;a href=&#34;#生成滤波核&#34; class=&#34;headerlink&#34; title=&#34;生成滤波核&#34;&gt;&lt;/a&gt;生成滤波核&lt;/h3&gt;&lt;p&gt;&lt;img src=&#34;https://s2.loli.net/2022/08/14/4dgAQ2RCInSM8m6.gif&#34; class=&#34;lazyload&#34; data-srcset=&#34;https://s2.loli.net/2022/08/14/4dgAQ2RCInSM8m6.gif&#34; srcset=&#34;data:image/gif;base64,R0lGODlhAQABAIAAAP///////yH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==&#34; alt=&#34;CodeCogsEqn.gif&#34;&gt;&lt;br&gt;(此处为一维高斯函数)&lt;/p&gt;
48
+ &lt;p&gt;sigma 为标准差 图像平滑程度取决于该值&lt;br&gt;我们使用高斯函数进行生成对应滤波核&lt;br&gt;离中心点越远那么边缘值的权值越小,我们依照高斯二维函数就可以生成对应滤波核。&lt;br&gt;代码具体参考如下&lt;/p&gt;
49
+ &lt;figure class=&#34;highlight plaintext&#34;&gt;&lt;table&gt;&lt;tr&gt;&lt;td class=&#34;gutter&#34;&gt;&lt;pre&gt;&lt;span class=&#34;line&#34;&gt;1&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;2&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;3&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;4&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;5&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;6&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;7&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;8&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;9&lt;/span&gt;&lt;br&gt;&lt;/pre&gt;&lt;/td&gt;&lt;td class=&#34;code&#34;&gt;&lt;pre&gt;&lt;span class=&#34;line&#34;&gt;def GaussKernel(size,k,sigma):&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt; _t = np.zeros((size,size),np.float32)&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt; for i in range (size):&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt; for j in range (size):&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt; norm = math.pow(i-k,2) + pow(j-k,2)&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt; _t[i,j] = math.exp(-norm/(2*math.pow(sigma,2)))/2*math.pi*pow(sigma,2)&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt; sum = np.sum(_t)&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt; kernel = _t/sum&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt; return kernel&lt;/span&gt;&lt;br&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/figure&gt;
50
+ &lt;h3 id=&#34;卷积生成&#34;&gt;&lt;a href=&#34;#卷积生成&#34; class=&#34;headerlink&#34; title=&#34;卷积生成&#34;&gt;&lt;/a&gt;卷积生成&lt;/h3&gt;&lt;p&gt;然后我们使用对应的滤波权值进行乘以像素值,就可以生成新值,但是滤波核仅3×3大小,我们在原图像每一个像素点运算一次,即可生成新的图形。&lt;br&gt;运算为: 每个像素点周围点 权×值 的和为中心点新值。&lt;/p&gt;
51
+ &lt;figure class=&#34;highlight plaintext&#34;&gt;&lt;table&gt;&lt;tr&gt;&lt;td class=&#34;gutter&#34;&gt;&lt;pre&gt;&lt;span class=&#34;line&#34;&gt;1&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;2&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;3&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;4&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;5&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;6&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;7&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;8&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;9&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;10&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;11&lt;/span&gt;&lt;br&gt;&lt;/pre&gt;&lt;/td&gt;&lt;td class=&#34;code&#34;&gt;&lt;pre&gt;&lt;span class=&#34;line&#34;&gt;def mygaussFilter(img_gray,kernel):&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt; h,w = img_gray.shape&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt; k_h,k_w = kernel.shape&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt; for i in range(int(k_h/2),h-int(k_h/2)):&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt; for j in range(int(k_h/2),w-int(k_h/2)):&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt; sum = 0&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt; for k in range(0,k_h):&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt; for l in range(0,k_h):&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt; sum += img_gray[i-int(k_h/2)+k,j-int(k_h/2)+l]*kernel[k,l]&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt; img_gray[i,j] = sum&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt; return img_gray&lt;/span&gt;&lt;br&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/figure&gt;
52
+ &lt;/div&gt;&lt;div class=&#34;story post-story&#34;&gt;&lt;h2 id=&#34;样例代码&#34;&gt;&lt;a href=&#34;#样例代码&#34; class=&#34;headerlink&#34; title=&#34;样例代码&#34;&gt;&lt;/a&gt;样例代码&lt;/h2&gt;&lt;figure class=&#34;highlight plaintext&#34;&gt;&lt;table&gt;&lt;tr&gt;&lt;td class=&#34;gutter&#34;&gt;&lt;pre&gt;&lt;span class=&#34;line&#34;&gt;1&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;2&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;3&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;4&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;5&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;6&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;7&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;8&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;9&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;10&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;11&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;12&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;13&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;14&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;15&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;16&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;17&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;18&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;19&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;20&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;21&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;22&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;23&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;24&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;25&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;26&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;27&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;28&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;29&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;30&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;31&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;32&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;33&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;34&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;35&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;36&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;37&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;38&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;39&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;40&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;41&lt;/span&gt;&lt;br&gt;&lt;/pre&gt;&lt;/td&gt;&lt;td class=&#34;code&#34;&gt;&lt;pre&gt;&lt;span class=&#34;line&#34;&gt;import math&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;import cv2&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;import numpy as np&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;def GaussKernel(size,k,sigma):&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt; _t = np.zeros((size,size),np.float32)&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt; for i in range (size):&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt; for j in range (size):&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt; norm = math.pow(i-k,2) + pow(j-k,2)&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt; _t[i,j] = math.exp(-norm/(2*math.pow(sigma,2)))/2*math.pi*pow(sigma,2)&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt; sum = np.sum(_t)&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt; kernel = _t/sum&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt; return kernel&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;def mygaussFilter(img_gray,kernel):&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt; h,w = img_gray.shape&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt; k_h,k_w = kernel.shape&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt; for i in range(int(k_h/2),h-int(k_h/2)):&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt; for j in range(int(k_h/2),w-int(k_h/2)):&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt; sum = 0&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt; for k in range(0,k_h):&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt; for l in range(0,k_h):&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt; sum += img_gray[i-int(k_h/2)+k,j-int(k_h/2)+l]*kernel[k,l]&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt; img_gray[i,j] = sum&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt; return img_gray&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;if __name__ == &amp;#x27;__main__&amp;#x27;:&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt; img = cv2.imread(&amp;quot;demo.jpg&amp;quot;)&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt; img_gray = cv2.cvtColor(img,cv2.COLOR_RGB2GRAY)&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt; img_g = img_gray.copy()&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt; k=1&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt; size = 2*k+1&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt; kernel = gausskernel(size,k,1.5)&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt; print(kernel)&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt; img_B,img_G,img_R = cv2.split(img)&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt; img_gauss_B = mygaussFilter(img_B,kernel)&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt; img_gauss_G = mygaussFilter(img_G,kernel)&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt; img_gauss_R = mygaussFilter(img_R,kernel)&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt; img_gauss = cv2.merge([img_gauss_B,img_gauss_G,img_gauss_R])&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt; img_comp = np.hstack((img,img_gauss))&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt; cv2.imshow(&amp;quot;gauss&amp;quot;,img_comp)&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt; cv2.waitKey(0)&lt;/span&gt;&lt;br&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/figure&gt;
53
+ &lt;/div&gt;&lt;div class=&#34;story post-story&#34;&gt;&lt;h2 id=&#34;直接OpenCV操作-非原理实现方案-使用封装方法&#34;&gt;&lt;a href=&#34;#直接OpenCV操作-非原理实现方案-使用封装方法&#34; class=&#34;headerlink&#34; title=&#34;直接OpenCV操作(非原理实现方案 使用封装方法)&#34;&gt;&lt;/a&gt;直接OpenCV操作(非原理实现方案 使用封装方法)&lt;/h2&gt;&lt;figure class=&#34;highlight plaintext&#34;&gt;&lt;table&gt;&lt;tr&gt;&lt;td class=&#34;gutter&#34;&gt;&lt;pre&gt;&lt;span class=&#34;line&#34;&gt;1&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;2&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;3&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;4&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;5&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;6&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;7&lt;/span&gt;&lt;br&gt;&lt;/pre&gt;&lt;/td&gt;&lt;td class=&#34;code&#34;&gt;&lt;pre&gt;&lt;span class=&#34;line&#34;&gt;import cv2&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;Gn=cv2.imread(&amp;quot;Gaussian_noise.jpg&amp;quot;) &lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;Gf=cv2.GaussianBlur(Gn,(3,3),0,0)&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;cv2.imshow(&amp;quot;噪声图像&amp;quot;,Gn)&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;cv2.imshow(&amp;quot;滤波图像&amp;quot;,Gf)&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;cv2.waitKey()&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;cv2.destroyAllWindows()&lt;/span&gt;&lt;br&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/figure&gt;
54
+ &lt;/div&gt;&lt;div class=&#34;story post-story&#34;&gt;&lt;h2 id=&#34;Que-边界点的处理&#34;&gt;&lt;a href=&#34;#Que-边界点的处理&#34; class=&#34;headerlink&#34; title=&#34;Que: 边界点的处理&#34;&gt;&lt;/a&gt;Que: 边界点的处理&lt;/h2&gt;&lt;p&gt;如果一个点处于边界,周边没有足够的点,怎么办?&lt;br&gt;一个变通方法,就是把已有的点拷贝到另一面的对应位置,模拟出完整的矩阵。&lt;br&gt;当然我们这里很简单,就是进行矩阵补零上去,用零进行模拟完整矩阵。&lt;/p&gt;
55
+ &lt;/div&gt;&lt;div class=&#34;story post-story&#34;&gt;&lt;h2 id=&#34;总结&#34;&gt;&lt;a href=&#34;#总结&#34; class=&#34;headerlink&#34; title=&#34;总结&#34;&gt;&lt;/a&gt;总结&lt;/h2&gt;&lt;p&gt;高斯滤波可以让图像高斯噪声降低,并且平滑图像,并且opencv等库已经提供封装,我们可以很快的使用&lt;/p&gt;
56
+ &lt;/div&gt;&lt;div class=&#34;story post-story&#34;&gt;&lt;h2 id=&#34;文章引用&#34;&gt;&lt;a href=&#34;#文章引用&#34; class=&#34;headerlink&#34; title=&#34;文章引用&#34;&gt;&lt;/a&gt;文章引用&lt;/h2&gt;&lt;p&gt;高斯滤波&lt;br&gt;&lt;a href=&#34;https://blog.csdn.net/weixin_51571728/article/details/121527964&#34;&gt;https://blog.csdn.net/weixin_51571728/article/details/121527964&lt;/a&gt;&lt;br&gt;高斯滤波核&lt;br&gt;&lt;a href=&#34;https://blog.csdn.net/qqq777_/article/details/112800310&#34;&gt;https://blog.csdn.net/qqq777_/article/details/112800310&lt;/a&gt;&lt;br&gt;有关线性滤波、滤波核的基本概念(概念理解)&lt;br&gt;&lt;a href=&#34;https://blog.csdn.net/weixin_42664622/article/details/103672899&#34;&gt;https://blog.csdn.net/weixin_42664622/article/details/103672899&lt;/a&gt;&lt;br&gt;数字图像处理基础 — 高斯滤波&lt;br&gt;&lt;a href=&#34;https://zhuanlan.zhihu.com/p/82569305&#34;&gt;https://zhuanlan.zhihu.com/p/82569305&lt;/a&gt;&lt;br&gt;图像滤波原理(不推荐)&lt;br&gt;&lt;a href=&#34;https://view.inews.qq.com/a/20220425A06HHF00&#34;&gt;https://view.inews.qq.com/a/20220425A06HHF00&lt;/a&gt;&lt;/p&gt;
57
+ &lt;/div&gt;&lt;div class=&#34;story post-story&#34;&gt;&lt;h2 id=&#34;提示&#34;&gt;&lt;a href=&#34;#提示&#34; class=&#34;headerlink&#34; title=&#34;提示&#34;&gt;&lt;/a&gt;提示&lt;/h2&gt;&lt;p&gt;该文章并不准确,如果有错误请积极指出。&lt;/p&gt;
58
+
59
+ &lt;/div&gt; ]]></description>
60
+ </item>
61
+ <item>
62
+ <guid isPermalink="true">https://nanaeo.cn/2022/08/04/NewBlog/</guid>
63
+ <title>新博客建好啦</title>
64
+ <link>https://nanaeo.cn/2022/08/04/NewBlog/</link>
65
+ <category>SiteLog</category>
66
+ <category>HexoThemes</category>
67
+ <category>Hexo</category>
68
+ <pubDate>Thu, 04 Aug 2022 16:00:00 +0000</pubDate>
69
+ <description><![CDATA[ &lt;p&gt;Hi Hexo,I am Mlikiowa!&lt;br&gt;是全新的Hexo&amp;#x2F;vlolantis博客,我又回来写博客了!&lt;/p&gt;
70
+ &lt;span id=&#34;more&#34;&gt;&lt;/span&gt;
71
+
72
+ &lt;div class=&#34;story post-story&#34;&gt;&lt;h2 id=&#34;回忆&#34;&gt;&lt;a href=&#34;#回忆&#34; class=&#34;headerlink&#34; title=&#34;回忆&#34;&gt;&lt;/a&gt;回忆&lt;/h2&gt;&lt;div class=&#34;timeline&#34;&gt;&lt;div class=&#34;timenode&#34;&gt;&lt;div class=&#34;meta&#34;&gt;&lt;p&gt;&lt;p&gt;2019.Previous&lt;/p&gt;
73
+ &lt;/p&gt;&lt;/div&gt;&lt;div class=&#34;body&#34;&gt;&lt;p&gt;使用过Emlog Wordpress来搭建博客,使用过各种博客系统,体验不能说差,只能说没有。&lt;/p&gt;&lt;/div&gt;&lt;/div&gt;
74
+ &lt;div class=&#34;timenode&#34;&gt;&lt;div class=&#34;meta&#34;&gt;&lt;p&gt;&lt;p&gt;2019.Done&lt;/p&gt;
75
+ &lt;/p&gt;&lt;/div&gt;&lt;div class=&#34;body&#34;&gt;&lt;p&gt;开始尝试在CSDN 简书平台发布自己的文章,但是后来因为咱不太喜欢平台限制,遂转入Typecho来搭建博客。&lt;/p&gt;&lt;/div&gt;&lt;/div&gt;
76
+ &lt;div class=&#34;timenode&#34;&gt;&lt;div class=&#34;meta&#34;&gt;&lt;p&gt;&lt;p&gt;2020.Done&lt;/p&gt;
77
+ &lt;/p&gt;&lt;/div&gt;&lt;div class=&#34;body&#34;&gt;&lt;p&gt;一开始typecho小而美的感觉是很不错的体验,加上我正好会使用PHP,能自己搓插件,所以体验还不错。&lt;/p&gt;&lt;/div&gt;&lt;/div&gt;
78
+ &lt;div class=&#34;timenode&#34;&gt;&lt;div class=&#34;meta&#34;&gt;&lt;p&gt;&lt;p&gt;2021.Done&lt;/p&gt;
79
+ &lt;/p&gt;&lt;/div&gt;&lt;div class=&#34;body&#34;&gt;&lt;p&gt;期间域名备案和准备高考,并搭建了一个运行在国内的typecho博客。&lt;/p&gt;&lt;/div&gt;&lt;/div&gt;
80
+ &lt;div class=&#34;timenode&#34;&gt;&lt;div class=&#34;meta&#34;&gt;&lt;p&gt;&lt;p&gt;2022.Done&lt;/p&gt;
81
+ &lt;/p&gt;&lt;/div&gt;&lt;div class=&#34;body&#34;&gt;&lt;p&gt;上半年:因为没有空闲时间打理博客,备案因无法联系注销,后来意外将电脑中typecho的备份删除,故跑路。&lt;br&gt;下半年:借大佬之手找回了数据,但准备重新开始,于是依靠Hexo搭建了全新的博客,走上了白嫖之路。&lt;/p&gt;&lt;/div&gt;&lt;/div&gt;
82
+ &lt;/div&gt;
83
+
84
+ &lt;ul&gt;
85
+ &lt;li&gt;&lt;p&gt;&lt;strong&gt;事件前言:&lt;/strong&gt; 各位好啊,以上就是我的悲剧经历了,现在我又新搭了博客,使用Hexo博客来进行搭建,依托serverless和action等工具实现。&lt;/p&gt;
86
+ &lt;/li&gt;
87
+ &lt;li&gt;&lt;p&gt;&lt;strong&gt;备案悲剧:&lt;/strong&gt; 之前我一直使用typecho,服务器和域名在国内备案,高中学业繁忙,每天都忙着学习。&lt;br&gt;所以个人就没有时间处理相关的事情,审核电话我也没有接到,导致国内备案掉了,加上本来博文写的就不怎么样,后来干脆就直接删掉跑路了,虽然后面通过大佬进行找回了,我也是决定从头开始了。&lt;/p&gt;
88
+ &lt;/li&gt;
89
+ &lt;li&gt;&lt;p&gt;&lt;strong&gt;计划上线:&lt;/strong&gt; 直到2022年的下半年毕业,我终于想起时修理博客,却又嫌折腾博客麻烦,国内备案审核挺烦。&lt;br&gt;本来是计划在另一位大佬那里使用Typecho搭建博客,因为typecho某些地方有些实在是难受,导致我实在是忍受不了痛苦了(恼,于是很快决定更换博客系统。&lt;/p&gt;
90
+ &lt;/li&gt;
91
+ &lt;li&gt;&lt;p&gt;&lt;strong&gt;实际行动:&lt;/strong&gt; 于是我决定博客使用hexo搭建,并且以低成本实现搭个稳定的博客,&lt;br&gt;本博客是非常容易在新设备上使用,轻松可以在新的地方迁移使用,将跑路可能性降到最低了。&lt;/p&gt;
92
+ &lt;/li&gt;
93
+ &lt;/ul&gt;
94
+ &lt;h3 id=&#34;博客运行环境&#34;&gt;&lt;a href=&#34;#博客运行环境&#34; class=&#34;headerlink&#34; title=&#34;博客运行环境&#34;&gt;&lt;/a&gt;博客运行环境&lt;/h3&gt;&lt;div class=&#34;table&#34;&gt;&lt;table&gt;
95
+ &lt;thead&gt;
96
+ &lt;tr&gt;
97
+ &lt;th&gt;Name&lt;/th&gt;
98
+ &lt;th&gt;Content&lt;/th&gt;
99
+ &lt;/tr&gt;
100
+ &lt;/thead&gt;
101
+ &lt;tbody&gt;&lt;tr&gt;
102
+ &lt;td&gt;Blog&lt;/td&gt;
103
+ &lt;td&gt;Hexo&lt;/td&gt;
104
+ &lt;/tr&gt;
105
+ &lt;tr&gt;
106
+ &lt;td&gt;Theme&lt;/td&gt;
107
+ &lt;td&gt;volantis&lt;/td&gt;
108
+ &lt;/tr&gt;
109
+ &lt;tr&gt;
110
+ &lt;td&gt;platform&lt;/td&gt;
111
+ &lt;td&gt;vercel&Github&lt;/td&gt;
112
+ &lt;/tr&gt;
113
+ &lt;tr&gt;
114
+ &lt;td&gt;domain&lt;/td&gt;
115
+ &lt;td&gt;nanaeo.cn&lt;/td&gt;
116
+ &lt;/tr&gt;
117
+ &lt;/tbody&gt;&lt;/table&gt;
118
+ &lt;/div&gt;
119
+
120
+ &lt;ul&gt;
121
+ &lt;li&gt;&lt;strong&gt;小吐槽:&lt;/strong&gt; 之前还想试试&lt;code&gt;hexo-theme-diaspora&lt;/code&gt;这样的主题,&lt;br&gt;这款博客是从wp移植到hexo的,介绍图很好看,可惜作者没更新了,于是我只能选择其它主题了。&lt;br&gt;所以我换成了&lt;strong&gt;volantis&lt;/strong&gt;主题 (&lt;code&gt;npm -i hexo-theme-volantis&lt;/code&gt; 可以轻松安装),个人感觉色调和布局都很好看,可玩程度很高。&lt;/li&gt;
122
+ &lt;/ul&gt;
123
+ &lt;/div&gt;&lt;div class=&#34;story post-story&#34;&gt;&lt;h2 id=&#34;博客搭建&#34;&gt;&lt;a href=&#34;#博客搭建&#34; class=&#34;headerlink&#34; title=&#34;博客搭建&#34;&gt;&lt;/a&gt;博客搭建&lt;/h2&gt;&lt;div class=&#34;tag link&#34;&gt;&lt;a class=&#34;link-card&#34; title=&#34;本博客源码项目&#34; href=&#34;https://github.com/MliKiowa/MliKiowa.github.io&#34;&gt;&lt;div class=&#34;left&#34;&gt;&lt;img src=&#34;https://q1.qlogo.cn/g?b=qq&amp;nk=1627126029&amp;s=100&#34; class=&#34;lazyload&#34; data-srcset=&#34;https://q1.qlogo.cn/g?b=qq&amp;nk=1627126029&amp;s=100&#34; srcset=&#34;data:image/gif;base64,R0lGODlhAQABAIAAAP///////yH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==&#34;/&gt;&lt;/div&gt;&lt;div class=&#34;right&#34;&gt;&lt;p class=&#34;text&#34;&gt;本博客源码项目&lt;/p&gt;&lt;p class=&#34;url&#34;&gt;https://github.com/MliKiowa/MliKiowa.github.io&lt;/p&gt;&lt;/div&gt;&lt;/a&gt;&lt;/div&gt;
124
+ &lt;ul&gt;
125
+ &lt;li&gt;&lt;p&gt;本博客通过使用GithubAction等方式生成部署分发博文到如githubpage vercel等服务商&lt;br&gt;至于推送到&lt;code&gt;cos/oss .etc storage bucket&lt;/code&gt;还是算了,毕竟谁用谁欠费(容易挨打,好点情况也得宕了)。&lt;/p&gt;
126
+ &lt;/li&gt;
127
+ &lt;li&gt;&lt;p&gt;&lt;strong&gt;小提示:&lt;/strong&gt; 使用多服务商涉及到Dns分流,像腾讯Dnspod的这种解析服务要交钱升级才能使用,非常的难受,所以我考虑使用动态Api进行切换dns解析。&lt;/p&gt;
128
+ &lt;/li&gt;
129
+ &lt;li&gt;&lt;p&gt;&lt;strong&gt;小吐槽:&lt;/strong&gt; 居然&lt;code&gt;github workflow&lt;/code&gt;只有已经写好的&lt;code&gt;deploy hugo site to githubpage workflow&lt;/code&gt;,没有hexo自动部署的脚步,于是我照猫画虎写了一个Hexo自动部署脚本,但因水平太菜,用这个workflow还得我改了半天。&lt;br&gt;正当我吐槽这么大个github没人发布自动部署脚本的时候,我在github search找到了类似的workflow,但是我已经写完了,难受。&lt;/p&gt;
130
+ &lt;/li&gt;
131
+ &lt;/ul&gt;
132
+ &lt;/div&gt;&lt;div class=&#34;story post-story&#34;&gt;&lt;h2 id=&#34;迁移使用&#34;&gt;&lt;a href=&#34;#迁移使用&#34; class=&#34;headerlink&#34; title=&#34;迁移使用&#34;&gt;&lt;/a&gt;迁移使用&lt;/h2&gt;&lt;ul&gt;
133
+ &lt;li&gt;本博客通过以下脚本可以快速迁移,从云端Github下载源码然后在本地进行编写博文,提交后直接在使用action刷新博客。 (该内容已经失效)&lt;/li&gt;
134
+ &lt;li&gt;&lt;strong&gt;Tips:&lt;/strong&gt; 如果你有需要也可以执行以下脚本建立新博客,可以轻松在新设备上运行。&lt;details &gt;&lt;summary&gt; bash.sh &lt;/summary&gt;
135
+ &lt;div class=&#39;content&#39;&gt;
136
+ &lt;figure class=&#34;highlight plaintext&#34;&gt;&lt;table&gt;&lt;tr&gt;&lt;td class=&#34;gutter&#34;&gt;&lt;pre&gt;&lt;span class=&#34;line&#34;&gt;1&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;2&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;3&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;4&lt;/span&gt;&lt;br&gt;&lt;/pre&gt;&lt;/td&gt;&lt;td class=&#34;code&#34;&gt;&lt;pre&gt;&lt;span class=&#34;line&#34;&gt;git clone https://github.com/MliKiowa/nanaeo&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;cd MliKiowa.github.io&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;npm install&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;hexo g&lt;/span&gt;&lt;br&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/figure&gt;
137
+ &lt;/div&gt;
138
+ &lt;/details&gt;&lt;/li&gt;
139
+ &lt;/ul&gt;
140
+ &lt;/div&gt;&lt;div class=&#34;story post-story&#34;&gt;&lt;h2 id=&#34;博客内容&#34;&gt;&lt;a href=&#34;#博客内容&#34; class=&#34;headerlink&#34; title=&#34;博客内容&#34;&gt;&lt;/a&gt;博客内容&lt;/h2&gt;&lt;div class=&#34;table&#34;&gt;&lt;table&gt;
141
+ &lt;thead&gt;
142
+ &lt;tr&gt;
143
+ &lt;th&gt;Classification&lt;/th&gt;
144
+ &lt;th&gt;Content&lt;/th&gt;
145
+ &lt;/tr&gt;
146
+ &lt;/thead&gt;
147
+ &lt;tbody&gt;&lt;tr&gt;
148
+ &lt;td&gt;Dev Exp&lt;/td&gt;
149
+ &lt;td&gt;Free Developer&lt;/td&gt;
150
+ &lt;/tr&gt;
151
+ &lt;tr&gt;
152
+ &lt;td&gt;Site Log&lt;/td&gt;
153
+ &lt;td&gt;Site Maintenance Log&lt;/td&gt;
154
+ &lt;/tr&gt;
155
+ &lt;tr&gt;
156
+ &lt;td&gt;Life Log&lt;/td&gt;
157
+ &lt;td&gt;Record your life&lt;/td&gt;
158
+ &lt;/tr&gt;
159
+ &lt;/tbody&gt;&lt;/table&gt;
160
+ &lt;/div&gt;
161
+ &lt;ul&gt;
162
+ &lt;li&gt;&lt;strong&gt;小提示:&lt;/strong&gt; 内容的主要以编程和生活为主,不会有资源推荐,也不接受类似站点友链。&lt;/li&gt;
163
+ &lt;/ul&gt;
164
+ &lt;/div&gt;&lt;div class=&#34;story post-story&#34;&gt;&lt;h2 id=&#34;期盼&#34;&gt;&lt;a href=&#34;#期盼&#34; class=&#34;headerlink&#34; title=&#34;期盼&#34;&gt;&lt;/a&gt;期盼&lt;/h2&gt;&lt;ul&gt;
165
+ &lt;li&gt;&lt;strong&gt;域名问题:&lt;/strong&gt; 原来的域名看起来好憨,还被&lt;strong&gt;我朋友嘲笑了&lt;/strong&gt;,因此旧域名怎么能配得上新博客,所以我还是注册个符合气质的新域名啊,所以nanaeo.cn诞生了,寓意没有很特别,全凭感觉来,可爱就对了不是嘛(歪头&lt;/li&gt;
166
+ &lt;li&gt;&lt;strong&gt;跑路问题:&lt;/strong&gt; 折腾数次各种博客的我真的是太累了,所以本博客能run起来我觉得不是不会去折腾什么新博客了,但是请允许我说一句,我正在努力成为年更博主吧,半年一更就是高产!&lt;/li&gt;
167
+ &lt;li&gt;&lt;strong&gt;内容布局:&lt;/strong&gt; 咱正在正在摸索,你现在看到的排版全是我正在尝试的,我很少使用Hexo,可以说是全新的萌新,但是让我来慢慢完善应该没有任何问题。&lt;/li&gt;
168
+ &lt;li&gt;&lt;strong&gt;图床问题:&lt;/strong&gt; 这个问题我根本不知道怎么解决我还是摆烂吧,博文能不放图我绝对不会放图出来。&lt;/li&gt;
169
+ &lt;li&gt;&lt;strong&gt;总结一下:&lt;/strong&gt; 这就是Mlikiowa全新的博客了,Always believe that something wonderful is about to happen.Let’s go!&lt;/li&gt;
170
+ &lt;/ul&gt;
171
+
172
+ &lt;/div&gt; ]]></description>
173
+ </item>
174
+ </channel>
175
+ </rss>
@@ -0,0 +1,58 @@
1
+ <?xml version="1.0"?>
2
+ <feed xmlns="http://www.w3.org/2005/Atom">
3
+ <id>https://nanaeo.cn</id>
4
+ <title>Village • Posts by &#34;devlog&#34; tag</title>
5
+ <link href="https://nanaeo.cn" />
6
+ <updated>2022-08-13T16:00:00.000Z</updated>
7
+ <category term="DevLog" />
8
+ <category term="Gauss" />
9
+ <category term="SiteLog" />
10
+ <category term="HexoThemes" />
11
+ <category term="Hexo" />
12
+ <entry>
13
+ <id>https://nanaeo.cn/2022/08/13/GaussWave/</id>
14
+ <title>高斯滤波</title>
15
+ <link rel="alternate" href="https://nanaeo.cn/2022/08/13/GaussWave/"/>
16
+ <content type="html">&lt;p&gt;高斯滤波的实现&lt;/p&gt;
17
+ &lt;span id=&#34;more&#34;&gt;&lt;/span&gt;
18
+
19
+ &lt;div class=&#34;story post-story&#34;&gt;&lt;h2 id=&#34;本文提示&#34;&gt;&lt;a href=&#34;#本文提示&#34; class=&#34;headerlink&#34; title=&#34;本文提示&#34;&gt;&lt;/a&gt;本文提示&lt;/h2&gt;&lt;p&gt;本文提供了相关代码和算法仅为示例学习,并非标准案例,并且OpenCV提供了高斯滤波函数,如果遇到不明白的概念和地方可以参考引用文章理解,也可以尝试在搜索引擎上搜索相关概念和图片示例,由于本站资源原因,暂不提供图片。&lt;/p&gt;
20
+ &lt;p&gt;tips: 本文为了方便仅是灰度图片处理&lt;br&gt;如果需要彩色图片应该尝试修改代码三种通道进行分别处理或其它方法。&lt;/p&gt;
21
+ &lt;/div&gt;&lt;div class=&#34;story post-story&#34;&gt;&lt;h2 id=&#34;概念理解-部分来自百科等&#34;&gt;&lt;a href=&#34;#概念理解-部分来自百科等&#34; class=&#34;headerlink&#34; title=&#34;概念理解(部分来自百科等)&#34;&gt;&lt;/a&gt;概念理解(部分来自百科等)&lt;/h2&gt;&lt;h3 id=&#34;滤波&#34;&gt;&lt;a href=&#34;#滤波&#34; class=&#34;headerlink&#34; title=&#34;滤波&#34;&gt;&lt;/a&gt;滤波&lt;/h3&gt;&lt;p&gt;滤波就对图像像素点及其邻域点的灰度值按照一定的参数规则进行加权平均,可以有效滤去理想图像中叠加的高频噪声。常用的滤波有线性滤波、中值滤波、均值滤波、双边滤波、高斯滤波等。滤波有抑制噪声的作用,但这会使得图像边缘模糊。(摘自别的地方)&lt;/p&gt;
22
+ &lt;h3 id=&#34;低通滤波&#34;&gt;&lt;a href=&#34;#低通滤波&#34; class=&#34;headerlink&#34; title=&#34;低通滤波&#34;&gt;&lt;/a&gt;低通滤波&lt;/h3&gt;&lt;p&gt;低通滤波是一种过滤方式,规则为低频信号能正常通过,而超过设定临界值的高频信号则被阻隔、减弱,图像处理领域可用来模糊。&lt;/p&gt;
23
+ &lt;h3 id=&#34;高通滤波&#34;&gt;&lt;a href=&#34;#高通滤波&#34; class=&#34;headerlink&#34; title=&#34;高通滤波&#34;&gt;&lt;/a&gt;高通滤波&lt;/h3&gt;&lt;p&gt;高通滤波(high-pass filter) 是一种过滤方式,规则为高频信号能正常通过,而低于设定临界值的低频信号则被阻隔、减弱。但是阻隔、减弱的幅度则会依据不同的频率以及不同的滤波程序(目的)而改变,图像处理领域可用于锐化。&lt;/p&gt;
24
+ &lt;h3 id=&#34;高斯滤波&#34;&gt;&lt;a href=&#34;#高斯滤波&#34; class=&#34;headerlink&#34; title=&#34;高斯滤波&#34;&gt;&lt;/a&gt;高斯滤波&lt;/h3&gt;&lt;p&gt;高斯滤波是一种线性平滑滤波,适用于消除高斯噪声,广泛应用于图像处理的减噪过程,对处理呈现正态分布(高斯分布)的噪声(包括图像噪声)效果显著。&lt;br&gt;tips: 常用高斯模糊就是使用高斯滤波完成的, 高斯模糊是低通滤波的一种, 也就是滤波函数是低通高斯函数, 但是高斯滤波是指用高斯函数作为滤波函数, 至于是不是模糊,要看是高斯低通还是高斯高通, 低通就是模糊, 高通就是锐化。&lt;/p&gt;
25
+ &lt;h3 id=&#34;核算子、模板、结构都是一种&#34;&gt;&lt;a href=&#34;#核算子、模板、结构都是一种&#34; class=&#34;headerlink&#34; title=&#34;核算子、模板、结构都是一种&#34;&gt;&lt;/a&gt;核算子、模板、结构都是一种&lt;/h3&gt;&lt;p&gt;当我们进行图像处理时时,使用到的权用一个矩阵表示,可以利用该矩阵计算对应像素,同时我们叫这个矩阵为核算子、模板、结构。(示例见前提指明)&lt;br&gt;大小可小可大,并且一般为奇数,&lt;br&gt;Que:核大小为什么是都是类似3×3&amp;#x2F;5×5 奇数呢?&lt;br&gt;其中一个原因是定位中心锚点,偶数是无法确定中心点的。&lt;/p&gt;
26
+ &lt;h3 id=&#34;滤波核&#34;&gt;&lt;a href=&#34;#滤波核&#34; class=&#34;headerlink&#34; title=&#34;滤波核&#34;&gt;&lt;/a&gt;滤波核&lt;/h3&gt;&lt;p&gt;当进行滤波时,里面是核的内容是权重并且可以用于处理像素,那么该核称为滤波核。&lt;br&gt;(通俗解释 专业解释 请查询资料)&lt;/p&gt;
27
+ &lt;h3 id=&#34;归一化&#34;&gt;&lt;a href=&#34;#归一化&#34; class=&#34;headerlink&#34; title=&#34;归一化&#34;&gt;&lt;/a&gt;归一化&lt;/h3&gt;&lt;p&gt;就是生成核或者说模板加起来的权不为一,这时候我们核内每一个值除以核内总值,就实现了归一化。&lt;/p&gt;
28
+ &lt;h3 id=&#34;卷积核&#34;&gt;&lt;a href=&#34;#卷积核&#34; class=&#34;headerlink&#34; title=&#34;卷积核&#34;&gt;&lt;/a&gt;卷积核&lt;/h3&gt;&lt;p&gt;如果一个核被用于卷积那么该核也可以被称为卷积核。(通俗解释 专业解释 请查询资料)&lt;/p&gt;
29
+ &lt;h3 id=&#34;高斯核&#34;&gt;&lt;a href=&#34;#高斯核&#34; class=&#34;headerlink&#34; title=&#34;高斯核&#34;&gt;&lt;/a&gt;高斯核&lt;/h3&gt;&lt;p&gt;那么高斯核固然就是高斯分布生成的核了&lt;/p&gt;
30
+ &lt;/div&gt;&lt;div class=&#34;story post-story&#34;&gt;&lt;h2 id=&#34;环境与依赖&#34;&gt;&lt;a href=&#34;#环境与依赖&#34; class=&#34;headerlink&#34; title=&#34;环境与依赖&#34;&gt;&lt;/a&gt;环境与依赖&lt;/h2&gt;&lt;p&gt;Python 本次使用的编程语言&lt;br&gt;OpenCV 跨平台计算机视觉库&lt;br&gt;Windows11 本文中代码运行系统&lt;/p&gt;
31
+ &lt;h3 id=&#34;OpenCv库安装&#34;&gt;&lt;a href=&#34;#OpenCv库安装&#34; class=&#34;headerlink&#34; title=&#34;OpenCv库安装&#34;&gt;&lt;/a&gt;OpenCv库安装&lt;/h3&gt;&lt;p&gt;(清华源 可自行切换)&lt;/p&gt;
32
+ &lt;figure class=&#34;highlight plaintext&#34;&gt;&lt;table&gt;&lt;tr&gt;&lt;td class=&#34;gutter&#34;&gt;&lt;pre&gt;&lt;span class=&#34;line&#34;&gt;1&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;2&lt;/span&gt;&lt;br&gt;&lt;/pre&gt;&lt;/td&gt;&lt;td class=&#34;code&#34;&gt;&lt;pre&gt;&lt;span class=&#34;line&#34;&gt;pip install opencv-python -i https://pypi.tuna.tsinghua.edu.cn/simple opencv-python&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;pip install opencv-contrib-python -i https://pypi.tuna.tsinghua.edu.cn/simple opencv-python&lt;/span&gt;&lt;br&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/figure&gt;
33
+ &lt;/div&gt;&lt;div class=&#34;story post-story&#34;&gt;&lt;h2 id=&#34;举例&#34;&gt;&lt;a href=&#34;#举例&#34; class=&#34;headerlink&#34; title=&#34;举例&#34;&gt;&lt;/a&gt;举例&lt;/h2&gt;&lt;p&gt;最终滤波核示例 (提示:权请保证和为1 此处已经归一化 但并非真实情况)&lt;br&gt;0.1 0.1 0.2&lt;br&gt;0.1 0.1 0.1&lt;br&gt;0.1 0.1 0.1&lt;/p&gt;
34
+ &lt;p&gt;为3×3网格坐标结构&lt;br&gt;该模板大小 3×3&lt;/p&gt;
35
+ &lt;/div&gt;&lt;div class=&#34;story post-story&#34;&gt;&lt;h2 id=&#34;算法过程&#34;&gt;&lt;a href=&#34;#算法过程&#34; class=&#34;headerlink&#34; title=&#34;算法过程&#34;&gt;&lt;/a&gt;算法过程&lt;/h2&gt;&lt;h3 id=&#34;高斯滤波实现方法&#34;&gt;&lt;a href=&#34;#高斯滤波实现方法&#34; class=&#34;headerlink&#34; title=&#34;高斯滤波实现方法&#34;&gt;&lt;/a&gt;高斯滤波实现方法&lt;/h3&gt;&lt;p&gt;看完以上相信各位并没有很多理解,并不要紧,联系实际我们进一步进行&lt;br&gt;高斯滤波通常情况下有两种实现方式,一是用离散化窗口滑窗卷积, 另一种通过傅里叶变换,其中第一种毕竟常见,可能这时候有人又问了,这又是什么,别急,咱先慢慢来,离散化窗口滑窗卷积其实就是进行有限次的移动核运算区域的卷积运算,那么我们可以开始了。&lt;/p&gt;
36
+ &lt;h3 id=&#34;算法过程-1&#34;&gt;&lt;a href=&#34;#算法过程-1&#34; class=&#34;headerlink&#34; title=&#34;算法过程&#34;&gt;&lt;/a&gt;算法过程&lt;/h3&gt;&lt;p&gt;0.图像灰度处理 (为了方便)&lt;/p&gt;
37
+ &lt;ol&gt;
38
+ &lt;li&gt;生成滤波核&lt;/li&gt;
39
+ &lt;li&gt;进行卷积处理图像&lt;/li&gt;
40
+ &lt;/ol&gt;
41
+ &lt;h3 id=&#34;生成滤波核&#34;&gt;&lt;a href=&#34;#生成滤波核&#34; class=&#34;headerlink&#34; title=&#34;生成滤波核&#34;&gt;&lt;/a&gt;生成滤波核&lt;/h3&gt;&lt;p&gt;&lt;img src=&#34;https://s2.loli.net/2022/08/14/4dgAQ2RCInSM8m6.gif&#34; class=&#34;lazyload&#34; data-srcset=&#34;https://s2.loli.net/2022/08/14/4dgAQ2RCInSM8m6.gif&#34; srcset=&#34;data:image/gif;base64,R0lGODlhAQABAIAAAP///////yH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==&#34; alt=&#34;CodeCogsEqn.gif&#34;&gt;&lt;br&gt;(此处为一维高斯函数)&lt;/p&gt;
42
+ &lt;p&gt;sigma 为标准差 图像平滑程度取决于该值&lt;br&gt;我们使用高斯函数进行生成对应滤波核&lt;br&gt;离中心点越远那么边缘值的权值越小,我们依照高斯二维函数就可以生成对应滤波核。&lt;br&gt;代码具体参考如下&lt;/p&gt;
43
+ &lt;figure class=&#34;highlight plaintext&#34;&gt;&lt;table&gt;&lt;tr&gt;&lt;td class=&#34;gutter&#34;&gt;&lt;pre&gt;&lt;span class=&#34;line&#34;&gt;1&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;2&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;3&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;4&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;5&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;6&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;7&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;8&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;9&lt;/span&gt;&lt;br&gt;&lt;/pre&gt;&lt;/td&gt;&lt;td class=&#34;code&#34;&gt;&lt;pre&gt;&lt;span class=&#34;line&#34;&gt;def GaussKernel(size,k,sigma):&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt; _t = np.zeros((size,size),np.float32)&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt; for i in range (size):&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt; for j in range (size):&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt; norm = math.pow(i-k,2) + pow(j-k,2)&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt; _t[i,j] = math.exp(-norm/(2*math.pow(sigma,2)))/2*math.pi*pow(sigma,2)&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt; sum = np.sum(_t)&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt; kernel = _t/sum&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt; return kernel&lt;/span&gt;&lt;br&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/figure&gt;
44
+ &lt;h3 id=&#34;卷积生成&#34;&gt;&lt;a href=&#34;#卷积生成&#34; class=&#34;headerlink&#34; title=&#34;卷积生成&#34;&gt;&lt;/a&gt;卷积生成&lt;/h3&gt;&lt;p&gt;然后我们使用对应的滤波权值进行乘以像素值,就可以生成新值,但是滤波核仅3×3大小,我们在原图像每一个像素点运算一次,即可生成新的图形。&lt;br&gt;运算为: 每个像素点周围点 权×值 的和为中心点新值。&lt;/p&gt;
45
+ &lt;figure class=&#34;highlight plaintext&#34;&gt;&lt;table&gt;&lt;tr&gt;&lt;td class=&#34;gutter&#34;&gt;&lt;pre&gt;&lt;span class=&#34;line&#34;&gt;1&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;2&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;3&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;4&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;5&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;6&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;7&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;8&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;9&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;10&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;11&lt;/span&gt;&lt;br&gt;&lt;/pre&gt;&lt;/td&gt;&lt;td class=&#34;code&#34;&gt;&lt;pre&gt;&lt;span class=&#34;line&#34;&gt;def mygaussFilter(img_gray,kernel):&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt; h,w = img_gray.shape&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt; k_h,k_w = kernel.shape&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt; for i in range(int(k_h/2),h-int(k_h/2)):&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt; for j in range(int(k_h/2),w-int(k_h/2)):&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt; sum = 0&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt; for k in range(0,k_h):&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt; for l in range(0,k_h):&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt; sum += img_gray[i-int(k_h/2)+k,j-int(k_h/2)+l]*kernel[k,l]&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt; img_gray[i,j] = sum&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt; return img_gray&lt;/span&gt;&lt;br&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/figure&gt;
46
+ &lt;/div&gt;&lt;div class=&#34;story post-story&#34;&gt;&lt;h2 id=&#34;样例代码&#34;&gt;&lt;a href=&#34;#样例代码&#34; class=&#34;headerlink&#34; title=&#34;样例代码&#34;&gt;&lt;/a&gt;样例代码&lt;/h2&gt;&lt;figure class=&#34;highlight plaintext&#34;&gt;&lt;table&gt;&lt;tr&gt;&lt;td class=&#34;gutter&#34;&gt;&lt;pre&gt;&lt;span class=&#34;line&#34;&gt;1&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;2&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;3&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;4&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;5&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;6&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;7&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;8&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;9&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;10&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;11&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;12&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;13&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;14&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;15&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;16&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;17&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;18&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;19&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;20&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;21&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;22&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;23&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;24&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;25&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;26&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;27&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;28&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;29&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;30&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;31&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;32&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;33&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;34&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;35&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;36&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;37&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;38&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;39&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;40&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;41&lt;/span&gt;&lt;br&gt;&lt;/pre&gt;&lt;/td&gt;&lt;td class=&#34;code&#34;&gt;&lt;pre&gt;&lt;span class=&#34;line&#34;&gt;import math&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;import cv2&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;import numpy as np&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;def GaussKernel(size,k,sigma):&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt; _t = np.zeros((size,size),np.float32)&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt; for i in range (size):&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt; for j in range (size):&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt; norm = math.pow(i-k,2) + pow(j-k,2)&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt; _t[i,j] = math.exp(-norm/(2*math.pow(sigma,2)))/2*math.pi*pow(sigma,2)&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt; sum = np.sum(_t)&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt; kernel = _t/sum&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt; return kernel&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;def mygaussFilter(img_gray,kernel):&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt; h,w = img_gray.shape&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt; k_h,k_w = kernel.shape&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt; for i in range(int(k_h/2),h-int(k_h/2)):&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt; for j in range(int(k_h/2),w-int(k_h/2)):&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt; sum = 0&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt; for k in range(0,k_h):&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt; for l in range(0,k_h):&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt; sum += img_gray[i-int(k_h/2)+k,j-int(k_h/2)+l]*kernel[k,l]&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt; img_gray[i,j] = sum&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt; return img_gray&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;if __name__ == &amp;#x27;__main__&amp;#x27;:&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt; img = cv2.imread(&amp;quot;demo.jpg&amp;quot;)&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt; img_gray = cv2.cvtColor(img,cv2.COLOR_RGB2GRAY)&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt; img_g = img_gray.copy()&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt; k=1&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt; size = 2*k+1&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt; kernel = gausskernel(size,k,1.5)&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt; print(kernel)&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt; img_B,img_G,img_R = cv2.split(img)&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt; img_gauss_B = mygaussFilter(img_B,kernel)&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt; img_gauss_G = mygaussFilter(img_G,kernel)&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt; img_gauss_R = mygaussFilter(img_R,kernel)&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt; img_gauss = cv2.merge([img_gauss_B,img_gauss_G,img_gauss_R])&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt; img_comp = np.hstack((img,img_gauss))&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt; cv2.imshow(&amp;quot;gauss&amp;quot;,img_comp)&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt; cv2.waitKey(0)&lt;/span&gt;&lt;br&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/figure&gt;
47
+ &lt;/div&gt;&lt;div class=&#34;story post-story&#34;&gt;&lt;h2 id=&#34;直接OpenCV操作-非原理实现方案-使用封装方法&#34;&gt;&lt;a href=&#34;#直接OpenCV操作-非原理实现方案-使用封装方法&#34; class=&#34;headerlink&#34; title=&#34;直接OpenCV操作(非原理实现方案 使用封装方法)&#34;&gt;&lt;/a&gt;直接OpenCV操作(非原理实现方案 使用封装方法)&lt;/h2&gt;&lt;figure class=&#34;highlight plaintext&#34;&gt;&lt;table&gt;&lt;tr&gt;&lt;td class=&#34;gutter&#34;&gt;&lt;pre&gt;&lt;span class=&#34;line&#34;&gt;1&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;2&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;3&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;4&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;5&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;6&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;7&lt;/span&gt;&lt;br&gt;&lt;/pre&gt;&lt;/td&gt;&lt;td class=&#34;code&#34;&gt;&lt;pre&gt;&lt;span class=&#34;line&#34;&gt;import cv2&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;Gn=cv2.imread(&amp;quot;Gaussian_noise.jpg&amp;quot;) &lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;Gf=cv2.GaussianBlur(Gn,(3,3),0,0)&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;cv2.imshow(&amp;quot;噪声图像&amp;quot;,Gn)&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;cv2.imshow(&amp;quot;滤波图像&amp;quot;,Gf)&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;cv2.waitKey()&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;cv2.destroyAllWindows()&lt;/span&gt;&lt;br&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/figure&gt;
48
+ &lt;/div&gt;&lt;div class=&#34;story post-story&#34;&gt;&lt;h2 id=&#34;Que-边界点的处理&#34;&gt;&lt;a href=&#34;#Que-边界点的处理&#34; class=&#34;headerlink&#34; title=&#34;Que: 边界点的处理&#34;&gt;&lt;/a&gt;Que: 边界点的处理&lt;/h2&gt;&lt;p&gt;如果一个点处于边界,周边没有足够的点,怎么办?&lt;br&gt;一个变通方法,就是把已有的点拷贝到另一面的对应位置,模拟出完整的矩阵。&lt;br&gt;当然我们这里很简单,就是进行矩阵补零上去,用零进行模拟完整矩阵。&lt;/p&gt;
49
+ &lt;/div&gt;&lt;div class=&#34;story post-story&#34;&gt;&lt;h2 id=&#34;总结&#34;&gt;&lt;a href=&#34;#总结&#34; class=&#34;headerlink&#34; title=&#34;总结&#34;&gt;&lt;/a&gt;总结&lt;/h2&gt;&lt;p&gt;高斯滤波可以让图像高斯噪声降低,并且平滑图像,并且opencv等库已经提供封装,我们可以很快的使用&lt;/p&gt;
50
+ &lt;/div&gt;&lt;div class=&#34;story post-story&#34;&gt;&lt;h2 id=&#34;文章引用&#34;&gt;&lt;a href=&#34;#文章引用&#34; class=&#34;headerlink&#34; title=&#34;文章引用&#34;&gt;&lt;/a&gt;文章引用&lt;/h2&gt;&lt;p&gt;高斯滤波&lt;br&gt;&lt;a href=&#34;https://blog.csdn.net/weixin_51571728/article/details/121527964&#34;&gt;https://blog.csdn.net/weixin_51571728/article/details/121527964&lt;/a&gt;&lt;br&gt;高斯滤波核&lt;br&gt;&lt;a href=&#34;https://blog.csdn.net/qqq777_/article/details/112800310&#34;&gt;https://blog.csdn.net/qqq777_/article/details/112800310&lt;/a&gt;&lt;br&gt;有关线性滤波、滤波核的基本概念(概念理解)&lt;br&gt;&lt;a href=&#34;https://blog.csdn.net/weixin_42664622/article/details/103672899&#34;&gt;https://blog.csdn.net/weixin_42664622/article/details/103672899&lt;/a&gt;&lt;br&gt;数字图像处理基础 — 高斯滤波&lt;br&gt;&lt;a href=&#34;https://zhuanlan.zhihu.com/p/82569305&#34;&gt;https://zhuanlan.zhihu.com/p/82569305&lt;/a&gt;&lt;br&gt;图像滤波原理(不推荐)&lt;br&gt;&lt;a href=&#34;https://view.inews.qq.com/a/20220425A06HHF00&#34;&gt;https://view.inews.qq.com/a/20220425A06HHF00&lt;/a&gt;&lt;/p&gt;
51
+ &lt;/div&gt;&lt;div class=&#34;story post-story&#34;&gt;&lt;h2 id=&#34;提示&#34;&gt;&lt;a href=&#34;#提示&#34; class=&#34;headerlink&#34; title=&#34;提示&#34;&gt;&lt;/a&gt;提示&lt;/h2&gt;&lt;p&gt;该文章并不准确,如果有错误请积极指出。&lt;/p&gt;
52
+
53
+ &lt;/div&gt;</content>
54
+ <category term="DevLog" />
55
+ <category term="Gauss" />
56
+ <updated>2022-08-13T16:00:00.000Z</updated>
57
+ </entry>
58
+ </feed>
@@ -0,0 +1,19 @@
1
+ {
2
+ "version": "https://jsonfeed.org/version/1",
3
+ "title": "Village • All posts by \"devlog\" tag",
4
+ "description": "It is a little blog~",
5
+ "home_page_url": "https://nanaeo.cn",
6
+ "items": [
7
+ {
8
+ "id": "https://nanaeo.cn/2022/08/13/GaussWave/",
9
+ "url": "https://nanaeo.cn/2022/08/13/GaussWave/",
10
+ "title": "高斯滤波",
11
+ "date_published": "2022-08-13T16:00:00.000Z",
12
+ "content_html": "<p>高斯滤波的实现</p>\n<span id=\"more\"></span>\n\n<div class=\"story post-story\"><h2 id=\"本文提示\"><a href=\"#本文提示\" class=\"headerlink\" title=\"本文提示\"></a>本文提示</h2><p>本文提供了相关代码和算法仅为示例学习,并非标准案例,并且OpenCV提供了高斯滤波函数,如果遇到不明白的概念和地方可以参考引用文章理解,也可以尝试在搜索引擎上搜索相关概念和图片示例,由于本站资源原因,暂不提供图片。</p>\n<p>tips: 本文为了方便仅是灰度图片处理<br>如果需要彩色图片应该尝试修改代码三种通道进行分别处理或其它方法。</p>\n</div><div class=\"story post-story\"><h2 id=\"概念理解-部分来自百科等\"><a href=\"#概念理解-部分来自百科等\" class=\"headerlink\" title=\"概念理解(部分来自百科等)\"></a>概念理解(部分来自百科等)</h2><h3 id=\"滤波\"><a href=\"#滤波\" class=\"headerlink\" title=\"滤波\"></a>滤波</h3><p>滤波就对图像像素点及其邻域点的灰度值按照一定的参数规则进行加权平均,可以有效滤去理想图像中叠加的高频噪声。常用的滤波有线性滤波、中值滤波、均值滤波、双边滤波、高斯滤波等。滤波有抑制噪声的作用,但这会使得图像边缘模糊。(摘自别的地方)</p>\n<h3 id=\"低通滤波\"><a href=\"#低通滤波\" class=\"headerlink\" title=\"低通滤波\"></a>低通滤波</h3><p>低通滤波是一种过滤方式,规则为低频信号能正常通过,而超过设定临界值的高频信号则被阻隔、减弱,图像处理领域可用来模糊。</p>\n<h3 id=\"高通滤波\"><a href=\"#高通滤波\" class=\"headerlink\" title=\"高通滤波\"></a>高通滤波</h3><p>高通滤波(high-pass filter) 是一种过滤方式,规则为高频信号能正常通过,而低于设定临界值的低频信号则被阻隔、减弱。但是阻隔、减弱的幅度则会依据不同的频率以及不同的滤波程序(目的)而改变,图像处理领域可用于锐化。</p>\n<h3 id=\"高斯滤波\"><a href=\"#高斯滤波\" class=\"headerlink\" title=\"高斯滤波\"></a>高斯滤波</h3><p>高斯滤波是一种线性平滑滤波,适用于消除高斯噪声,广泛应用于图像处理的减噪过程,对处理呈现正态分布(高斯分布)的噪声(包括图像噪声)效果显著。<br>tips: 常用高斯模糊就是使用高斯滤波完成的, 高斯模糊是低通滤波的一种, 也就是滤波函数是低通高斯函数, 但是高斯滤波是指用高斯函数作为滤波函数, 至于是不是模糊,要看是高斯低通还是高斯高通, 低通就是模糊, 高通就是锐化。</p>\n<h3 id=\"核算子、模板、结构都是一种\"><a href=\"#核算子、模板、结构都是一种\" class=\"headerlink\" title=\"核算子、模板、结构都是一种\"></a>核算子、模板、结构都是一种</h3><p>当我们进行图像处理时时,使用到的权用一个矩阵表示,可以利用该矩阵计算对应像素,同时我们叫这个矩阵为核算子、模板、结构。(示例见前提指明)<br>大小可小可大,并且一般为奇数,<br>Que:核大小为什么是都是类似3×3&#x2F;5×5 奇数呢?<br>其中一个原因是定位中心锚点,偶数是无法确定中心点的。</p>\n<h3 id=\"滤波核\"><a href=\"#滤波核\" class=\"headerlink\" title=\"滤波核\"></a>滤波核</h3><p>当进行滤波时,里面是核的内容是权重并且可以用于处理像素,那么该核称为滤波核。<br>(通俗解释 专业解释 请查询资料)</p>\n<h3 id=\"归一化\"><a href=\"#归一化\" class=\"headerlink\" title=\"归一化\"></a>归一化</h3><p>就是生成核或者说模板加起来的权不为一,这时候我们核内每一个值除以核内总值,就实现了归一化。</p>\n<h3 id=\"卷积核\"><a href=\"#卷积核\" class=\"headerlink\" title=\"卷积核\"></a>卷积核</h3><p>如果一个核被用于卷积那么该核也可以被称为卷积核。(通俗解释 专业解释 请查询资料)</p>\n<h3 id=\"高斯核\"><a href=\"#高斯核\" class=\"headerlink\" title=\"高斯核\"></a>高斯核</h3><p>那么高斯核固然就是高斯分布生成的核了</p>\n</div><div class=\"story post-story\"><h2 id=\"环境与依赖\"><a href=\"#环境与依赖\" class=\"headerlink\" title=\"环境与依赖\"></a>环境与依赖</h2><p>Python 本次使用的编程语言<br>OpenCV 跨平台计算机视觉库<br>Windows11 本文中代码运行系统</p>\n<h3 id=\"OpenCv库安装\"><a href=\"#OpenCv库安装\" class=\"headerlink\" title=\"OpenCv库安装\"></a>OpenCv库安装</h3><p>(清华源 可自行切换)</p>\n<figure class=\"highlight plaintext\"><table><tr><td class=\"gutter\"><pre><span class=\"line\">1</span><br><span class=\"line\">2</span><br></pre></td><td class=\"code\"><pre><span class=\"line\">pip install opencv-python -i https://pypi.tuna.tsinghua.edu.cn/simple opencv-python</span><br><span class=\"line\">pip install opencv-contrib-python -i https://pypi.tuna.tsinghua.edu.cn/simple opencv-python</span><br></pre></td></tr></table></figure>\n</div><div class=\"story post-story\"><h2 id=\"举例\"><a href=\"#举例\" class=\"headerlink\" title=\"举例\"></a>举例</h2><p>最终滤波核示例 (提示:权请保证和为1 此处已经归一化 但并非真实情况)<br>0.1 0.1 0.2<br>0.1 0.1 0.1<br>0.1 0.1 0.1</p>\n<p>为3×3网格坐标结构<br>该模板大小 3×3</p>\n</div><div class=\"story post-story\"><h2 id=\"算法过程\"><a href=\"#算法过程\" class=\"headerlink\" title=\"算法过程\"></a>算法过程</h2><h3 id=\"高斯滤波实现方法\"><a href=\"#高斯滤波实现方法\" class=\"headerlink\" title=\"高斯滤波实现方法\"></a>高斯滤波实现方法</h3><p>看完以上相信各位并没有很多理解,并不要紧,联系实际我们进一步进行<br>高斯滤波通常情况下有两种实现方式,一是用离散化窗口滑窗卷积, 另一种通过傅里叶变换,其中第一种毕竟常见,可能这时候有人又问了,这又是什么,别急,咱先慢慢来,离散化窗口滑窗卷积其实就是进行有限次的移动核运算区域的卷积运算,那么我们可以开始了。</p>\n<h3 id=\"算法过程-1\"><a href=\"#算法过程-1\" class=\"headerlink\" title=\"算法过程\"></a>算法过程</h3><p>0.图像灰度处理 (为了方便)</p>\n<ol>\n<li>生成滤波核</li>\n<li>进行卷积处理图像</li>\n</ol>\n<h3 id=\"生成滤波核\"><a href=\"#生成滤波核\" class=\"headerlink\" title=\"生成滤波核\"></a>生成滤波核</h3><p><img src=\"https://s2.loli.net/2022/08/14/4dgAQ2RCInSM8m6.gif\" class=\"lazyload\" data-srcset=\"https://s2.loli.net/2022/08/14/4dgAQ2RCInSM8m6.gif\" srcset=\"data:image/gif;base64,R0lGODlhAQABAIAAAP///////yH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==\" alt=\"CodeCogsEqn.gif\"><br>(此处为一维高斯函数)</p>\n<p>sigma 为标准差 图像平滑程度取决于该值<br>我们使用高斯函数进行生成对应滤波核<br>离中心点越远那么边缘值的权值越小,我们依照高斯二维函数就可以生成对应滤波核。<br>代码具体参考如下</p>\n<figure class=\"highlight plaintext\"><table><tr><td class=\"gutter\"><pre><span class=\"line\">1</span><br><span class=\"line\">2</span><br><span class=\"line\">3</span><br><span class=\"line\">4</span><br><span class=\"line\">5</span><br><span class=\"line\">6</span><br><span class=\"line\">7</span><br><span class=\"line\">8</span><br><span class=\"line\">9</span><br></pre></td><td class=\"code\"><pre><span class=\"line\">def GaussKernel(size,k,sigma):</span><br><span class=\"line\"> _t = np.zeros((size,size),np.float32)</span><br><span class=\"line\"> for i in range (size):</span><br><span class=\"line\"> for j in range (size):</span><br><span class=\"line\"> norm = math.pow(i-k,2) + pow(j-k,2)</span><br><span class=\"line\"> _t[i,j] = math.exp(-norm/(2*math.pow(sigma,2)))/2*math.pi*pow(sigma,2)</span><br><span class=\"line\"> sum = np.sum(_t)</span><br><span class=\"line\"> kernel = _t/sum</span><br><span class=\"line\"> return kernel</span><br></pre></td></tr></table></figure>\n<h3 id=\"卷积生成\"><a href=\"#卷积生成\" class=\"headerlink\" title=\"卷积生成\"></a>卷积生成</h3><p>然后我们使用对应的滤波权值进行乘以像素值,就可以生成新值,但是滤波核仅3×3大小,我们在原图像每一个像素点运算一次,即可生成新的图形。<br>运算为: 每个像素点周围点 权×值 的和为中心点新值。</p>\n<figure class=\"highlight plaintext\"><table><tr><td class=\"gutter\"><pre><span class=\"line\">1</span><br><span class=\"line\">2</span><br><span class=\"line\">3</span><br><span class=\"line\">4</span><br><span class=\"line\">5</span><br><span class=\"line\">6</span><br><span class=\"line\">7</span><br><span class=\"line\">8</span><br><span class=\"line\">9</span><br><span class=\"line\">10</span><br><span class=\"line\">11</span><br></pre></td><td class=\"code\"><pre><span class=\"line\">def mygaussFilter(img_gray,kernel):</span><br><span class=\"line\"> h,w = img_gray.shape</span><br><span class=\"line\"> k_h,k_w = kernel.shape</span><br><span class=\"line\"> for i in range(int(k_h/2),h-int(k_h/2)):</span><br><span class=\"line\"> for j in range(int(k_h/2),w-int(k_h/2)):</span><br><span class=\"line\"> sum = 0</span><br><span class=\"line\"> for k in range(0,k_h):</span><br><span class=\"line\"> for l in range(0,k_h):</span><br><span class=\"line\"> sum += img_gray[i-int(k_h/2)+k,j-int(k_h/2)+l]*kernel[k,l]</span><br><span class=\"line\"> img_gray[i,j] = sum</span><br><span class=\"line\"> return img_gray</span><br></pre></td></tr></table></figure>\n</div><div class=\"story post-story\"><h2 id=\"样例代码\"><a href=\"#样例代码\" class=\"headerlink\" title=\"样例代码\"></a>样例代码</h2><figure class=\"highlight plaintext\"><table><tr><td class=\"gutter\"><pre><span class=\"line\">1</span><br><span class=\"line\">2</span><br><span class=\"line\">3</span><br><span class=\"line\">4</span><br><span class=\"line\">5</span><br><span class=\"line\">6</span><br><span class=\"line\">7</span><br><span class=\"line\">8</span><br><span class=\"line\">9</span><br><span class=\"line\">10</span><br><span class=\"line\">11</span><br><span class=\"line\">12</span><br><span class=\"line\">13</span><br><span class=\"line\">14</span><br><span class=\"line\">15</span><br><span class=\"line\">16</span><br><span class=\"line\">17</span><br><span class=\"line\">18</span><br><span class=\"line\">19</span><br><span class=\"line\">20</span><br><span class=\"line\">21</span><br><span class=\"line\">22</span><br><span class=\"line\">23</span><br><span class=\"line\">24</span><br><span class=\"line\">25</span><br><span class=\"line\">26</span><br><span class=\"line\">27</span><br><span class=\"line\">28</span><br><span class=\"line\">29</span><br><span class=\"line\">30</span><br><span class=\"line\">31</span><br><span class=\"line\">32</span><br><span class=\"line\">33</span><br><span class=\"line\">34</span><br><span class=\"line\">35</span><br><span class=\"line\">36</span><br><span class=\"line\">37</span><br><span class=\"line\">38</span><br><span class=\"line\">39</span><br><span class=\"line\">40</span><br><span class=\"line\">41</span><br></pre></td><td class=\"code\"><pre><span class=\"line\">import math</span><br><span class=\"line\">import cv2</span><br><span class=\"line\">import numpy as np</span><br><span class=\"line\">def GaussKernel(size,k,sigma):</span><br><span class=\"line\"> _t = np.zeros((size,size),np.float32)</span><br><span class=\"line\"> for i in range (size):</span><br><span class=\"line\"> for j in range (size):</span><br><span class=\"line\"> norm = math.pow(i-k,2) + pow(j-k,2)</span><br><span class=\"line\"> _t[i,j] = math.exp(-norm/(2*math.pow(sigma,2)))/2*math.pi*pow(sigma,2)</span><br><span class=\"line\"> sum = np.sum(_t)</span><br><span class=\"line\"> kernel = _t/sum</span><br><span class=\"line\"> return kernel</span><br><span class=\"line\"></span><br><span class=\"line\">def mygaussFilter(img_gray,kernel):</span><br><span class=\"line\"> h,w = img_gray.shape</span><br><span class=\"line\"> k_h,k_w = kernel.shape</span><br><span class=\"line\"> for i in range(int(k_h/2),h-int(k_h/2)):</span><br><span class=\"line\"> for j in range(int(k_h/2),w-int(k_h/2)):</span><br><span class=\"line\"> sum = 0</span><br><span class=\"line\"> for k in range(0,k_h):</span><br><span class=\"line\"> for l in range(0,k_h):</span><br><span class=\"line\"> sum += img_gray[i-int(k_h/2)+k,j-int(k_h/2)+l]*kernel[k,l]</span><br><span class=\"line\"> img_gray[i,j] = sum</span><br><span class=\"line\"> return img_gray</span><br><span class=\"line\"></span><br><span class=\"line\">if __name__ == &#x27;__main__&#x27;:</span><br><span class=\"line\"> img = cv2.imread(&quot;demo.jpg&quot;)</span><br><span class=\"line\"> img_gray = cv2.cvtColor(img,cv2.COLOR_RGB2GRAY)</span><br><span class=\"line\"> img_g = img_gray.copy()</span><br><span class=\"line\"> k=1</span><br><span class=\"line\"> size = 2*k+1</span><br><span class=\"line\"> kernel = gausskernel(size,k,1.5)</span><br><span class=\"line\"> print(kernel)</span><br><span class=\"line\"> img_B,img_G,img_R = cv2.split(img)</span><br><span class=\"line\"> img_gauss_B = mygaussFilter(img_B,kernel)</span><br><span class=\"line\"> img_gauss_G = mygaussFilter(img_G,kernel)</span><br><span class=\"line\"> img_gauss_R = mygaussFilter(img_R,kernel)</span><br><span class=\"line\"> img_gauss = cv2.merge([img_gauss_B,img_gauss_G,img_gauss_R])</span><br><span class=\"line\"> img_comp = np.hstack((img,img_gauss))</span><br><span class=\"line\"> cv2.imshow(&quot;gauss&quot;,img_comp)</span><br><span class=\"line\"> cv2.waitKey(0)</span><br></pre></td></tr></table></figure>\n</div><div class=\"story post-story\"><h2 id=\"直接OpenCV操作-非原理实现方案-使用封装方法\"><a href=\"#直接OpenCV操作-非原理实现方案-使用封装方法\" class=\"headerlink\" title=\"直接OpenCV操作(非原理实现方案 使用封装方法)\"></a>直接OpenCV操作(非原理实现方案 使用封装方法)</h2><figure class=\"highlight plaintext\"><table><tr><td class=\"gutter\"><pre><span class=\"line\">1</span><br><span class=\"line\">2</span><br><span class=\"line\">3</span><br><span class=\"line\">4</span><br><span class=\"line\">5</span><br><span class=\"line\">6</span><br><span class=\"line\">7</span><br></pre></td><td class=\"code\"><pre><span class=\"line\">import cv2</span><br><span class=\"line\">Gn=cv2.imread(&quot;Gaussian_noise.jpg&quot;) </span><br><span class=\"line\">Gf=cv2.GaussianBlur(Gn,(3,3),0,0)</span><br><span class=\"line\">cv2.imshow(&quot;噪声图像&quot;,Gn)</span><br><span class=\"line\">cv2.imshow(&quot;滤波图像&quot;,Gf)</span><br><span class=\"line\">cv2.waitKey()</span><br><span class=\"line\">cv2.destroyAllWindows()</span><br></pre></td></tr></table></figure>\n</div><div class=\"story post-story\"><h2 id=\"Que-边界点的处理\"><a href=\"#Que-边界点的处理\" class=\"headerlink\" title=\"Que: 边界点的处理\"></a>Que: 边界点的处理</h2><p>如果一个点处于边界,周边没有足够的点,怎么办?<br>一个变通方法,就是把已有的点拷贝到另一面的对应位置,模拟出完整的矩阵。<br>当然我们这里很简单,就是进行矩阵补零上去,用零进行模拟完整矩阵。</p>\n</div><div class=\"story post-story\"><h2 id=\"总结\"><a href=\"#总结\" class=\"headerlink\" title=\"总结\"></a>总结</h2><p>高斯滤波可以让图像高斯噪声降低,并且平滑图像,并且opencv等库已经提供封装,我们可以很快的使用</p>\n</div><div class=\"story post-story\"><h2 id=\"文章引用\"><a href=\"#文章引用\" class=\"headerlink\" title=\"文章引用\"></a>文章引用</h2><p>高斯滤波<br><a href=\"https://blog.csdn.net/weixin_51571728/article/details/121527964\">https://blog.csdn.net/weixin_51571728/article/details/121527964</a><br>高斯滤波核<br><a href=\"https://blog.csdn.net/qqq777_/article/details/112800310\">https://blog.csdn.net/qqq777_/article/details/112800310</a><br>有关线性滤波、滤波核的基本概念(概念理解)<br><a href=\"https://blog.csdn.net/weixin_42664622/article/details/103672899\">https://blog.csdn.net/weixin_42664622/article/details/103672899</a><br>数字图像处理基础 — 高斯滤波<br><a href=\"https://zhuanlan.zhihu.com/p/82569305\">https://zhuanlan.zhihu.com/p/82569305</a><br>图像滤波原理(不推荐)<br><a href=\"https://view.inews.qq.com/a/20220425A06HHF00\">https://view.inews.qq.com/a/20220425A06HHF00</a></p>\n</div><div class=\"story post-story\"><h2 id=\"提示\"><a href=\"#提示\" class=\"headerlink\" title=\"提示\"></a>提示</h2><p>该文章并不准确,如果有错误请积极指出。</p>\n\n</div>",
13
+ "tags": [
14
+ "DevLog",
15
+ "Gauss"
16
+ ]
17
+ }
18
+ ]
19
+ }
@@ -0,0 +1,62 @@
1
+ <?xml version="1.0"?>
2
+ <rss version="2.0">
3
+ <channel>
4
+ <title>Village • Posts by &#34;devlog&#34; tag</title>
5
+ <link>https://nanaeo.cn</link>
6
+ <description>It is a little blog~</description>
7
+ <language>zh-CN,en,default</language>
8
+ <pubDate>Sat, 13 Aug 2022 16:00:00 +0000</pubDate>
9
+ <lastBuildDate>Sat, 13 Aug 2022 16:00:00 +0000</lastBuildDate>
10
+ <category>DevLog</category>
11
+ <category>Gauss</category>
12
+ <category>SiteLog</category>
13
+ <category>HexoThemes</category>
14
+ <category>Hexo</category>
15
+ <item>
16
+ <guid isPermalink="true">https://nanaeo.cn/2022/08/13/GaussWave/</guid>
17
+ <title>高斯滤波</title>
18
+ <link>https://nanaeo.cn/2022/08/13/GaussWave/</link>
19
+ <category>DevLog</category>
20
+ <category>Gauss</category>
21
+ <pubDate>Sat, 13 Aug 2022 16:00:00 +0000</pubDate>
22
+ <description><![CDATA[ &lt;p&gt;高斯滤波的实现&lt;/p&gt;
23
+ &lt;span id=&#34;more&#34;&gt;&lt;/span&gt;
24
+
25
+ &lt;div class=&#34;story post-story&#34;&gt;&lt;h2 id=&#34;本文提示&#34;&gt;&lt;a href=&#34;#本文提示&#34; class=&#34;headerlink&#34; title=&#34;本文提示&#34;&gt;&lt;/a&gt;本文提示&lt;/h2&gt;&lt;p&gt;本文提供了相关代码和算法仅为示例学习,并非标准案例,并且OpenCV提供了高斯滤波函数,如果遇到不明白的概念和地方可以参考引用文章理解,也可以尝试在搜索引擎上搜索相关概念和图片示例,由于本站资源原因,暂不提供图片。&lt;/p&gt;
26
+ &lt;p&gt;tips: 本文为了方便仅是灰度图片处理&lt;br&gt;如果需要彩色图片应该尝试修改代码三种通道进行分别处理或其它方法。&lt;/p&gt;
27
+ &lt;/div&gt;&lt;div class=&#34;story post-story&#34;&gt;&lt;h2 id=&#34;概念理解-部分来自百科等&#34;&gt;&lt;a href=&#34;#概念理解-部分来自百科等&#34; class=&#34;headerlink&#34; title=&#34;概念理解(部分来自百科等)&#34;&gt;&lt;/a&gt;概念理解(部分来自百科等)&lt;/h2&gt;&lt;h3 id=&#34;滤波&#34;&gt;&lt;a href=&#34;#滤波&#34; class=&#34;headerlink&#34; title=&#34;滤波&#34;&gt;&lt;/a&gt;滤波&lt;/h3&gt;&lt;p&gt;滤波就对图像像素点及其邻域点的灰度值按照一定的参数规则进行加权平均,可以有效滤去理想图像中叠加的高频噪声。常用的滤波有线性滤波、中值滤波、均值滤波、双边滤波、高斯滤波等。滤波有抑制噪声的作用,但这会使得图像边缘模糊。(摘自别的地方)&lt;/p&gt;
28
+ &lt;h3 id=&#34;低通滤波&#34;&gt;&lt;a href=&#34;#低通滤波&#34; class=&#34;headerlink&#34; title=&#34;低通滤波&#34;&gt;&lt;/a&gt;低通滤波&lt;/h3&gt;&lt;p&gt;低通滤波是一种过滤方式,规则为低频信号能正常通过,而超过设定临界值的高频信号则被阻隔、减弱,图像处理领域可用来模糊。&lt;/p&gt;
29
+ &lt;h3 id=&#34;高通滤波&#34;&gt;&lt;a href=&#34;#高通滤波&#34; class=&#34;headerlink&#34; title=&#34;高通滤波&#34;&gt;&lt;/a&gt;高通滤波&lt;/h3&gt;&lt;p&gt;高通滤波(high-pass filter) 是一种过滤方式,规则为高频信号能正常通过,而低于设定临界值的低频信号则被阻隔、减弱。但是阻隔、减弱的幅度则会依据不同的频率以及不同的滤波程序(目的)而改变,图像处理领域可用于锐化。&lt;/p&gt;
30
+ &lt;h3 id=&#34;高斯滤波&#34;&gt;&lt;a href=&#34;#高斯滤波&#34; class=&#34;headerlink&#34; title=&#34;高斯滤波&#34;&gt;&lt;/a&gt;高斯滤波&lt;/h3&gt;&lt;p&gt;高斯滤波是一种线性平滑滤波,适用于消除高斯噪声,广泛应用于图像处理的减噪过程,对处理呈现正态分布(高斯分布)的噪声(包括图像噪声)效果显著。&lt;br&gt;tips: 常用高斯模糊就是使用高斯滤波完成的, 高斯模糊是低通滤波的一种, 也就是滤波函数是低通高斯函数, 但是高斯滤波是指用高斯函数作为滤波函数, 至于是不是模糊,要看是高斯低通还是高斯高通, 低通就是模糊, 高通就是锐化。&lt;/p&gt;
31
+ &lt;h3 id=&#34;核算子、模板、结构都是一种&#34;&gt;&lt;a href=&#34;#核算子、模板、结构都是一种&#34; class=&#34;headerlink&#34; title=&#34;核算子、模板、结构都是一种&#34;&gt;&lt;/a&gt;核算子、模板、结构都是一种&lt;/h3&gt;&lt;p&gt;当我们进行图像处理时时,使用到的权用一个矩阵表示,可以利用该矩阵计算对应像素,同时我们叫这个矩阵为核算子、模板、结构。(示例见前提指明)&lt;br&gt;大小可小可大,并且一般为奇数,&lt;br&gt;Que:核大小为什么是都是类似3×3&amp;#x2F;5×5 奇数呢?&lt;br&gt;其中一个原因是定位中心锚点,偶数是无法确定中心点的。&lt;/p&gt;
32
+ &lt;h3 id=&#34;滤波核&#34;&gt;&lt;a href=&#34;#滤波核&#34; class=&#34;headerlink&#34; title=&#34;滤波核&#34;&gt;&lt;/a&gt;滤波核&lt;/h3&gt;&lt;p&gt;当进行滤波时,里面是核的内容是权重并且可以用于处理像素,那么该核称为滤波核。&lt;br&gt;(通俗解释 专业解释 请查询资料)&lt;/p&gt;
33
+ &lt;h3 id=&#34;归一化&#34;&gt;&lt;a href=&#34;#归一化&#34; class=&#34;headerlink&#34; title=&#34;归一化&#34;&gt;&lt;/a&gt;归一化&lt;/h3&gt;&lt;p&gt;就是生成核或者说模板加起来的权不为一,这时候我们核内每一个值除以核内总值,就实现了归一化。&lt;/p&gt;
34
+ &lt;h3 id=&#34;卷积核&#34;&gt;&lt;a href=&#34;#卷积核&#34; class=&#34;headerlink&#34; title=&#34;卷积核&#34;&gt;&lt;/a&gt;卷积核&lt;/h3&gt;&lt;p&gt;如果一个核被用于卷积那么该核也可以被称为卷积核。(通俗解释 专业解释 请查询资料)&lt;/p&gt;
35
+ &lt;h3 id=&#34;高斯核&#34;&gt;&lt;a href=&#34;#高斯核&#34; class=&#34;headerlink&#34; title=&#34;高斯核&#34;&gt;&lt;/a&gt;高斯核&lt;/h3&gt;&lt;p&gt;那么高斯核固然就是高斯分布生成的核了&lt;/p&gt;
36
+ &lt;/div&gt;&lt;div class=&#34;story post-story&#34;&gt;&lt;h2 id=&#34;环境与依赖&#34;&gt;&lt;a href=&#34;#环境与依赖&#34; class=&#34;headerlink&#34; title=&#34;环境与依赖&#34;&gt;&lt;/a&gt;环境与依赖&lt;/h2&gt;&lt;p&gt;Python 本次使用的编程语言&lt;br&gt;OpenCV 跨平台计算机视觉库&lt;br&gt;Windows11 本文中代码运行系统&lt;/p&gt;
37
+ &lt;h3 id=&#34;OpenCv库安装&#34;&gt;&lt;a href=&#34;#OpenCv库安装&#34; class=&#34;headerlink&#34; title=&#34;OpenCv库安装&#34;&gt;&lt;/a&gt;OpenCv库安装&lt;/h3&gt;&lt;p&gt;(清华源 可自行切换)&lt;/p&gt;
38
+ &lt;figure class=&#34;highlight plaintext&#34;&gt;&lt;table&gt;&lt;tr&gt;&lt;td class=&#34;gutter&#34;&gt;&lt;pre&gt;&lt;span class=&#34;line&#34;&gt;1&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;2&lt;/span&gt;&lt;br&gt;&lt;/pre&gt;&lt;/td&gt;&lt;td class=&#34;code&#34;&gt;&lt;pre&gt;&lt;span class=&#34;line&#34;&gt;pip install opencv-python -i https://pypi.tuna.tsinghua.edu.cn/simple opencv-python&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;pip install opencv-contrib-python -i https://pypi.tuna.tsinghua.edu.cn/simple opencv-python&lt;/span&gt;&lt;br&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/figure&gt;
39
+ &lt;/div&gt;&lt;div class=&#34;story post-story&#34;&gt;&lt;h2 id=&#34;举例&#34;&gt;&lt;a href=&#34;#举例&#34; class=&#34;headerlink&#34; title=&#34;举例&#34;&gt;&lt;/a&gt;举例&lt;/h2&gt;&lt;p&gt;最终滤波核示例 (提示:权请保证和为1 此处已经归一化 但并非真实情况)&lt;br&gt;0.1 0.1 0.2&lt;br&gt;0.1 0.1 0.1&lt;br&gt;0.1 0.1 0.1&lt;/p&gt;
40
+ &lt;p&gt;为3×3网格坐标结构&lt;br&gt;该模板大小 3×3&lt;/p&gt;
41
+ &lt;/div&gt;&lt;div class=&#34;story post-story&#34;&gt;&lt;h2 id=&#34;算法过程&#34;&gt;&lt;a href=&#34;#算法过程&#34; class=&#34;headerlink&#34; title=&#34;算法过程&#34;&gt;&lt;/a&gt;算法过程&lt;/h2&gt;&lt;h3 id=&#34;高斯滤波实现方法&#34;&gt;&lt;a href=&#34;#高斯滤波实现方法&#34; class=&#34;headerlink&#34; title=&#34;高斯滤波实现方法&#34;&gt;&lt;/a&gt;高斯滤波实现方法&lt;/h3&gt;&lt;p&gt;看完以上相信各位并没有很多理解,并不要紧,联系实际我们进一步进行&lt;br&gt;高斯滤波通常情况下有两种实现方式,一是用离散化窗口滑窗卷积, 另一种通过傅里叶变换,其中第一种毕竟常见,可能这时候有人又问了,这又是什么,别急,咱先慢慢来,离散化窗口滑窗卷积其实就是进行有限次的移动核运算区域的卷积运算,那么我们可以开始了。&lt;/p&gt;
42
+ &lt;h3 id=&#34;算法过程-1&#34;&gt;&lt;a href=&#34;#算法过程-1&#34; class=&#34;headerlink&#34; title=&#34;算法过程&#34;&gt;&lt;/a&gt;算法过程&lt;/h3&gt;&lt;p&gt;0.图像灰度处理 (为了方便)&lt;/p&gt;
43
+ &lt;ol&gt;
44
+ &lt;li&gt;生成滤波核&lt;/li&gt;
45
+ &lt;li&gt;进行卷积处理图像&lt;/li&gt;
46
+ &lt;/ol&gt;
47
+ &lt;h3 id=&#34;生成滤波核&#34;&gt;&lt;a href=&#34;#生成滤波核&#34; class=&#34;headerlink&#34; title=&#34;生成滤波核&#34;&gt;&lt;/a&gt;生成滤波核&lt;/h3&gt;&lt;p&gt;&lt;img src=&#34;https://s2.loli.net/2022/08/14/4dgAQ2RCInSM8m6.gif&#34; class=&#34;lazyload&#34; data-srcset=&#34;https://s2.loli.net/2022/08/14/4dgAQ2RCInSM8m6.gif&#34; srcset=&#34;data:image/gif;base64,R0lGODlhAQABAIAAAP///////yH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==&#34; alt=&#34;CodeCogsEqn.gif&#34;&gt;&lt;br&gt;(此处为一维高斯函数)&lt;/p&gt;
48
+ &lt;p&gt;sigma 为标准差 图像平滑程度取决于该值&lt;br&gt;我们使用高斯函数进行生成对应滤波核&lt;br&gt;离中心点越远那么边缘值的权值越小,我们依照高斯二维函数就可以生成对应滤波核。&lt;br&gt;代码具体参考如下&lt;/p&gt;
49
+ &lt;figure class=&#34;highlight plaintext&#34;&gt;&lt;table&gt;&lt;tr&gt;&lt;td class=&#34;gutter&#34;&gt;&lt;pre&gt;&lt;span class=&#34;line&#34;&gt;1&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;2&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;3&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;4&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;5&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;6&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;7&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;8&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;9&lt;/span&gt;&lt;br&gt;&lt;/pre&gt;&lt;/td&gt;&lt;td class=&#34;code&#34;&gt;&lt;pre&gt;&lt;span class=&#34;line&#34;&gt;def GaussKernel(size,k,sigma):&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt; _t = np.zeros((size,size),np.float32)&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt; for i in range (size):&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt; for j in range (size):&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt; norm = math.pow(i-k,2) + pow(j-k,2)&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt; _t[i,j] = math.exp(-norm/(2*math.pow(sigma,2)))/2*math.pi*pow(sigma,2)&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt; sum = np.sum(_t)&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt; kernel = _t/sum&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt; return kernel&lt;/span&gt;&lt;br&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/figure&gt;
50
+ &lt;h3 id=&#34;卷积生成&#34;&gt;&lt;a href=&#34;#卷积生成&#34; class=&#34;headerlink&#34; title=&#34;卷积生成&#34;&gt;&lt;/a&gt;卷积生成&lt;/h3&gt;&lt;p&gt;然后我们使用对应的滤波权值进行乘以像素值,就可以生成新值,但是滤波核仅3×3大小,我们在原图像每一个像素点运算一次,即可生成新的图形。&lt;br&gt;运算为: 每个像素点周围点 权×值 的和为中心点新值。&lt;/p&gt;
51
+ &lt;figure class=&#34;highlight plaintext&#34;&gt;&lt;table&gt;&lt;tr&gt;&lt;td class=&#34;gutter&#34;&gt;&lt;pre&gt;&lt;span class=&#34;line&#34;&gt;1&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;2&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;3&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;4&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;5&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;6&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;7&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;8&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;9&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;10&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;11&lt;/span&gt;&lt;br&gt;&lt;/pre&gt;&lt;/td&gt;&lt;td class=&#34;code&#34;&gt;&lt;pre&gt;&lt;span class=&#34;line&#34;&gt;def mygaussFilter(img_gray,kernel):&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt; h,w = img_gray.shape&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt; k_h,k_w = kernel.shape&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt; for i in range(int(k_h/2),h-int(k_h/2)):&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt; for j in range(int(k_h/2),w-int(k_h/2)):&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt; sum = 0&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt; for k in range(0,k_h):&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt; for l in range(0,k_h):&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt; sum += img_gray[i-int(k_h/2)+k,j-int(k_h/2)+l]*kernel[k,l]&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt; img_gray[i,j] = sum&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt; return img_gray&lt;/span&gt;&lt;br&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/figure&gt;
52
+ &lt;/div&gt;&lt;div class=&#34;story post-story&#34;&gt;&lt;h2 id=&#34;样例代码&#34;&gt;&lt;a href=&#34;#样例代码&#34; class=&#34;headerlink&#34; title=&#34;样例代码&#34;&gt;&lt;/a&gt;样例代码&lt;/h2&gt;&lt;figure class=&#34;highlight plaintext&#34;&gt;&lt;table&gt;&lt;tr&gt;&lt;td class=&#34;gutter&#34;&gt;&lt;pre&gt;&lt;span class=&#34;line&#34;&gt;1&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;2&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;3&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;4&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;5&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;6&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;7&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;8&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;9&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;10&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;11&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;12&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;13&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;14&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;15&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;16&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;17&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;18&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;19&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;20&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;21&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;22&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;23&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;24&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;25&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;26&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;27&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;28&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;29&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;30&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;31&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;32&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;33&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;34&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;35&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;36&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;37&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;38&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;39&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;40&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;41&lt;/span&gt;&lt;br&gt;&lt;/pre&gt;&lt;/td&gt;&lt;td class=&#34;code&#34;&gt;&lt;pre&gt;&lt;span class=&#34;line&#34;&gt;import math&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;import cv2&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;import numpy as np&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;def GaussKernel(size,k,sigma):&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt; _t = np.zeros((size,size),np.float32)&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt; for i in range (size):&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt; for j in range (size):&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt; norm = math.pow(i-k,2) + pow(j-k,2)&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt; _t[i,j] = math.exp(-norm/(2*math.pow(sigma,2)))/2*math.pi*pow(sigma,2)&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt; sum = np.sum(_t)&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt; kernel = _t/sum&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt; return kernel&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;def mygaussFilter(img_gray,kernel):&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt; h,w = img_gray.shape&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt; k_h,k_w = kernel.shape&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt; for i in range(int(k_h/2),h-int(k_h/2)):&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt; for j in range(int(k_h/2),w-int(k_h/2)):&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt; sum = 0&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt; for k in range(0,k_h):&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt; for l in range(0,k_h):&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt; sum += img_gray[i-int(k_h/2)+k,j-int(k_h/2)+l]*kernel[k,l]&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt; img_gray[i,j] = sum&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt; return img_gray&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;if __name__ == &amp;#x27;__main__&amp;#x27;:&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt; img = cv2.imread(&amp;quot;demo.jpg&amp;quot;)&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt; img_gray = cv2.cvtColor(img,cv2.COLOR_RGB2GRAY)&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt; img_g = img_gray.copy()&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt; k=1&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt; size = 2*k+1&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt; kernel = gausskernel(size,k,1.5)&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt; print(kernel)&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt; img_B,img_G,img_R = cv2.split(img)&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt; img_gauss_B = mygaussFilter(img_B,kernel)&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt; img_gauss_G = mygaussFilter(img_G,kernel)&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt; img_gauss_R = mygaussFilter(img_R,kernel)&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt; img_gauss = cv2.merge([img_gauss_B,img_gauss_G,img_gauss_R])&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt; img_comp = np.hstack((img,img_gauss))&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt; cv2.imshow(&amp;quot;gauss&amp;quot;,img_comp)&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt; cv2.waitKey(0)&lt;/span&gt;&lt;br&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/figure&gt;
53
+ &lt;/div&gt;&lt;div class=&#34;story post-story&#34;&gt;&lt;h2 id=&#34;直接OpenCV操作-非原理实现方案-使用封装方法&#34;&gt;&lt;a href=&#34;#直接OpenCV操作-非原理实现方案-使用封装方法&#34; class=&#34;headerlink&#34; title=&#34;直接OpenCV操作(非原理实现方案 使用封装方法)&#34;&gt;&lt;/a&gt;直接OpenCV操作(非原理实现方案 使用封装方法)&lt;/h2&gt;&lt;figure class=&#34;highlight plaintext&#34;&gt;&lt;table&gt;&lt;tr&gt;&lt;td class=&#34;gutter&#34;&gt;&lt;pre&gt;&lt;span class=&#34;line&#34;&gt;1&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;2&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;3&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;4&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;5&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;6&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;7&lt;/span&gt;&lt;br&gt;&lt;/pre&gt;&lt;/td&gt;&lt;td class=&#34;code&#34;&gt;&lt;pre&gt;&lt;span class=&#34;line&#34;&gt;import cv2&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;Gn=cv2.imread(&amp;quot;Gaussian_noise.jpg&amp;quot;) &lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;Gf=cv2.GaussianBlur(Gn,(3,3),0,0)&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;cv2.imshow(&amp;quot;噪声图像&amp;quot;,Gn)&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;cv2.imshow(&amp;quot;滤波图像&amp;quot;,Gf)&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;cv2.waitKey()&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;cv2.destroyAllWindows()&lt;/span&gt;&lt;br&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/figure&gt;
54
+ &lt;/div&gt;&lt;div class=&#34;story post-story&#34;&gt;&lt;h2 id=&#34;Que-边界点的处理&#34;&gt;&lt;a href=&#34;#Que-边界点的处理&#34; class=&#34;headerlink&#34; title=&#34;Que: 边界点的处理&#34;&gt;&lt;/a&gt;Que: 边界点的处理&lt;/h2&gt;&lt;p&gt;如果一个点处于边界,周边没有足够的点,怎么办?&lt;br&gt;一个变通方法,就是把已有的点拷贝到另一面的对应位置,模拟出完整的矩阵。&lt;br&gt;当然我们这里很简单,就是进行矩阵补零上去,用零进行模拟完整矩阵。&lt;/p&gt;
55
+ &lt;/div&gt;&lt;div class=&#34;story post-story&#34;&gt;&lt;h2 id=&#34;总结&#34;&gt;&lt;a href=&#34;#总结&#34; class=&#34;headerlink&#34; title=&#34;总结&#34;&gt;&lt;/a&gt;总结&lt;/h2&gt;&lt;p&gt;高斯滤波可以让图像高斯噪声降低,并且平滑图像,并且opencv等库已经提供封装,我们可以很快的使用&lt;/p&gt;
56
+ &lt;/div&gt;&lt;div class=&#34;story post-story&#34;&gt;&lt;h2 id=&#34;文章引用&#34;&gt;&lt;a href=&#34;#文章引用&#34; class=&#34;headerlink&#34; title=&#34;文章引用&#34;&gt;&lt;/a&gt;文章引用&lt;/h2&gt;&lt;p&gt;高斯滤波&lt;br&gt;&lt;a href=&#34;https://blog.csdn.net/weixin_51571728/article/details/121527964&#34;&gt;https://blog.csdn.net/weixin_51571728/article/details/121527964&lt;/a&gt;&lt;br&gt;高斯滤波核&lt;br&gt;&lt;a href=&#34;https://blog.csdn.net/qqq777_/article/details/112800310&#34;&gt;https://blog.csdn.net/qqq777_/article/details/112800310&lt;/a&gt;&lt;br&gt;有关线性滤波、滤波核的基本概念(概念理解)&lt;br&gt;&lt;a href=&#34;https://blog.csdn.net/weixin_42664622/article/details/103672899&#34;&gt;https://blog.csdn.net/weixin_42664622/article/details/103672899&lt;/a&gt;&lt;br&gt;数字图像处理基础 — 高斯滤波&lt;br&gt;&lt;a href=&#34;https://zhuanlan.zhihu.com/p/82569305&#34;&gt;https://zhuanlan.zhihu.com/p/82569305&lt;/a&gt;&lt;br&gt;图像滤波原理(不推荐)&lt;br&gt;&lt;a href=&#34;https://view.inews.qq.com/a/20220425A06HHF00&#34;&gt;https://view.inews.qq.com/a/20220425A06HHF00&lt;/a&gt;&lt;/p&gt;
57
+ &lt;/div&gt;&lt;div class=&#34;story post-story&#34;&gt;&lt;h2 id=&#34;提示&#34;&gt;&lt;a href=&#34;#提示&#34; class=&#34;headerlink&#34; title=&#34;提示&#34;&gt;&lt;/a&gt;提示&lt;/h2&gt;&lt;p&gt;该文章并不准确,如果有错误请积极指出。&lt;/p&gt;
58
+
59
+ &lt;/div&gt; ]]></description>
60
+ </item>
61
+ </channel>
62
+ </rss>