IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 人工智能 -> 山东大学数字图像处理实验(五) -> 正文阅读

[人工智能]山东大学数字图像处理实验(五)

1.快速均值滤波

1.1.实验过程中遇到的问题和解决方法

  • 问题一:

    • 问题:在使用积分图求快速均值滤波的时候,左上角的坐标应该是滤波核左上角位置x , y坐标都减去1。没减1导致图像有彩色边缘
    • 解决:如问题所述
  • 问题二:

    • 问题:滤波核的长度应该是奇数,因为计算一个位置的像素时,通常考虑其位于滤波核的中心

    • 解决:

      if(windowSize % 2 == 0) windowSize += 1;
      

2.结论分析与体会

2.1.流程介绍

代码写法有意避免if 的使用,这样运行速度快一点

  • 为图像加 padding。这里需要注意的是,滤波核的尺寸需要是奇数,因为一般将当前点作为滤波核的中心,如果是偶数的话就没有中心

    if(windowSize % 2 == 0) windowSize += 1;
    Mat padding_image;
    int padding = windowSize / 2;
    cv::copyMakeBorder(source_image , padding_image , padding , padding , padding , padding , cv::BORDER_DEFAULT);
    
  • 计算积分图。需要注意的是,需要在加了 padding 之后的图像上计算积分图。因为计算的时候使用了前缀和,因此保留了一个守卫节点,积分图索引从 1 开始存储。

在这里插入图片描述

在这里插入图片描述

for(int i = 1 ; i <= padding_image.rows ; i++){ // 计算并保存积分图在 sum2d 中,因为使用前缀和,因此保留一个守卫节点,这里从1开始存储
        init();
        for(int j = 1 ; j <= padding_image.cols ; j++){
            for(int c = 0 ; c < 3 ; c++){
                sum2d[i][j][c] = 0;
                sum_row[c] += padding_image.at<Vec3b>(i - 1 , j - 1)[c];//计算当前行的sum
                sum2d[i][j][c] += sum2d[i - 1][j][c] + sum_row[c];//从1开始存,否则i-1越界
            }
        }
    }
  • 均值滤波。通过遍历原图,将原图像的每个像素点都作为滤波核的中心,计算滤波核内像素的平均值来代替当前像素的像素值。需要注意的是,积分图是在padding后的图像上计算的,所以原图像的 [x,y] 像素对应的是积分图中的 [x+padding,y+padding]像素。因此,需要将所有坐标都加上 padding

在这里插入图片描述

db calculate(int x , int y , int padding , int c){
    int Z = (2*padding + 1) * (2*padding + 1); // 窗口内像素个数
    ll temp = sum2d[x + 2 * padding + 1][y + 2 * padding + 1][c] + sum2d[x][y][c] // sum是在padding后图像上计算的,因此原图的索引在sum上需要加上一个padding
            - sum2d[x + 2 * padding + 1][y][c] - sum2d[x][y + 2 * padding + 1][c]; // 窗口内的和
    return (temp * 1.0) / (Z * 1.0); // 计算均值
}

2.2.结果展示

本次实验算法计算积分图的过程中,又开了一个前缀和数组,用来计算当前行的当前位置及之前的数值和

    for(int i = 1 ; i <= padding_image.rows ; i++){
        init();
        for(int j = 1 ; j <= padding_image.cols ; j++){
            for(int c = 0 ; c < 3 ; c++){
                sum2d[i][j][c] = 0;
                sum_row[c] += padding_image.at<Vec3b>(i - 1 , j - 1)[c];//计算当前行的sum
                sum2d[i][j][c] += sum2d[i - 1][j][c] + sum_row[c];
            }
        }
    }

左图为原始图像,中间的图为算法实现的变换图像,右边的图为Opencv API 实现的变换图像

  • Window Size = 1

在这里插入图片描述

在这里插入图片描述

  • Window Size = 9

在这里插入图片描述

在这里插入图片描述

  • Window Size = 20

在这里插入图片描述

在这里插入图片描述

2.3.运行时间分析

  • boxFilter() 算法利用了加法的行列可分离行,复杂度为 windowSize * Width * Height

在这里插入图片描述

紫色的框为卷积核大小,往右平推,算每一列的和(每次只需要多算一列)。下面的红色点为算出的结果,然后在对红色点求和,得到总的和。

算完之后直接找就行了,不用经过额外运算

  • 积分图的计算过程

在这里插入图片描述

? S ( u , v ) = S ( u , v ? 1 ) + sum ? ( I [ 1 : u , v ] ) S(u, v)=S(u, v-1)+\operatorname{sum}(I[1: u, v]) S(u,v)=S(u,v?1)+sum(I[1:u,v])

这里可以看到,积分图的加法除了对数据本身求和之外,还要加上前一次的值,分析一下计算紫色框内的值要进行多少次加法

在这里插入图片描述

假如是一个 5 * 5 的框,需要计算 5 * 5 + 5 * 5 - 1 = 49 次。或者是 50次

boxFilter需要计算 5 * 5 + 4 = 29次。基本上为积分图的一半。

而且在计算完和之后,积分图还要利用以下公式来求解框内的数据和,boxFilter则是可以直接访问,因为boxFilter上一步的求和结果就是框内数据和。所以积分图这里又比boxFilter多进行运算。所以boxFilter更快

在这里插入图片描述

源码地址:Computer-Vision/3.2.cpp at main · SDU-NSY/Computer-Vision (github.com)

  人工智能 最新文章
2022吴恩达机器学习课程——第二课(神经网
第十五章 规则学习
FixMatch: Simplifying Semi-Supervised Le
数据挖掘Java——Kmeans算法的实现
大脑皮层的分割方法
【翻译】GPT-3是如何工作的
论文笔记:TEACHTEXT: CrossModal Generaliz
python从零学(六)
详解Python 3.x 导入(import)
【答读者问27】backtrader不支持最新版本的
上一篇文章      下一篇文章      查看所有文章
加:2022-10-22 21:15:35  更:2022-10-22 21:19:54 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/25 20:36:48-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码