HNU计算机视觉作业一

news2024/11/23 21:14:50

前言

选修的是蔡mj老师的计算机视觉,上课还是不错的,但是OpenCV可能需要自己学才能完整把作业写出来。由于没有认真学,这门课最后混了80多分,所以下面作业解题过程均为自己写的,并不是标准答案,仅供参考

任务1

修改test.py的task_one()函数,对task1.jpg进行去噪处理,处理结果保存为task1_proc.jpg

提示:请观察分析task1.jpg的噪声特点,并选择合适的处理方法
请添加图片描述

def task_one():
    img = cv2.imread('task1.jpg')
    
    #---------your code-----------------#

    median = cv2.medianBlur(img, 3)

    #---------draw figures--------------#

    plt.imshow(cv2.cvtColor(median, cv2.COLOR_BGR2RGB)),plt.title('task1 output')
    plt.show()
    
    #---------save figures--------------#
    cv2.imwrite("task1_proc.jpg", median)

效果如下:
请添加图片描述

任务2

修改test.py的task_two()函数,对task2.jpg进行去噪处理,处理结果保存为task2_proc.jpg

提示:请观察分析task2.jpg的噪声特点,并选择合适的处理方法

请添加图片描述

def task_two():
    img = cv2.imread('task2.jpg')
    
    #---------your code-----------------#

    blur = cv2.bilateralFilter(img,5,50,50)
    
    #---------draw figures--------------#
    #plt.imshow(cv2.cvtColor(blur, cv2.COLOR_BGR2RGB)),plt.title('task2 output')
    #plt.show()
    
    #---------save figures--------------#
    cv2.imwrite("task2_proc.jpg", blur)

效果如下:
请添加图片描述

任务3

修改test.py的task_three()函数,对task3.jpg进行去噪处理,处理结果保存为task3_proc.jpg

提示:task3.jpg中的噪声为y轴方向的周期噪声,周期为图像高度(height)的1/10

请添加图片描述

这个不会做,弄了半天

def task_three():
    #img = cv2.imread('task3.jpg',1)
    
    #---------your code-----------------#
    # 读取图像
    img = cv2.imread('task3.jpg')

    # 分离RGB通道
    b, g, r = cv2.split(img)

    # 对每个通道进行傅里叶变换
    fb = np.fft.fft2(b)
    fg = np.fft.fft2(g)
    fr = np.fft.fft2(r)

    # 将频域中的原点移动到图像中心
    fb_shift = np.fft.fftshift(fb)
    fg_shift = np.fft.fftshift(fg)
    fr_shift = np.fft.fftshift(fr)

    # 获取频谱图像
    magnitude_spectrum_b = 20 * np.log(np.abs(fb_shift))
    magnitude_spectrum_g = 20 * np.log(np.abs(fg_shift))
    magnitude_spectrum_r = 20 * np.log(np.abs(fr_shift))

    # 获取图像高度
    height, width = img.shape[:2]

    # 计算周期噪声的频率成分
    dft_height = np.ceil(height / 10)
    cy = np.arange(dft_height, height, dft_height)
    cx = np.arange(width)

    # 将周期噪声的频率成分设置为0
    for y in cy:
        fb_shift[int(y) - 1:int(y) + 1, :] = 0
        fg_shift[int(y) - 1:int(y) + 1, :] = 0
        fr_shift[int(y) - 1:int(y) + 1, :] = 0

    # 进行反傅里叶变换,得到去噪后的图像
    ib = np.fft.ifft2(np.fft.ifftshift(fb_shift))
    ig = np.fft.ifft2(np.fft.ifftshift(fg_shift))
    ir = np.fft.ifft2(np.fft.ifftshift(fr_shift))

    # 将每个通道的结果合并为一张去噪后的彩色图像
    denoised_img = cv2.merge((ib.real, ig.real, ir.real))

    #---------draw figures--------------#
    #plt.imshow(cv2.cvtColor(result, cv2.COLOR_BGR2RGB)),plt.title('task3 output')
    #plt.show()
    
    #---------save figures--------------#
    cv2.imwrite("task3_proc.jpg", denoised_img)

效果和原图没啥区别。。。
请添加图片描述

源代码:

# -*- coding: utf-8 -*-
"""
Created on Fri Mar 31 14:51:59 2023

@author: cai-mj
"""

import numpy as np
import cv2
from matplotlib import pyplot as plt

def task_one():
    img = cv2.imread('task1.jpg')
    
    #---------your code-----------------#

    median = cv2.medianBlur(img, 3)

    #---------draw figures--------------#

    plt.imshow(cv2.cvtColor(median, cv2.COLOR_BGR2RGB)),plt.title('task1 output')
    plt.show()
    
    #---------save figures--------------#
    cv2.imwrite("task1_proc.jpg", median)

def task_two():
    img = cv2.imread('task2.jpg')
    
    #---------your code-----------------#

    blur = cv2.bilateralFilter(img,5,50,50)
    
    #---------draw figures--------------#
    #plt.imshow(cv2.cvtColor(blur, cv2.COLOR_BGR2RGB)),plt.title('task2 output')
    #plt.show()
    
    #---------save figures--------------#
    cv2.imwrite("task2_proc.jpg", blur)

def task_three():
    #img = cv2.imread('task3.jpg',1)
    
    #---------your code-----------------#
    # 读取图像
    img = cv2.imread('task3.jpg')

    # 分离RGB通道
    b, g, r = cv2.split(img)

    # 对每个通道进行傅里叶变换
    fb = np.fft.fft2(b)
    fg = np.fft.fft2(g)
    fr = np.fft.fft2(r)

    # 将频域中的原点移动到图像中心
    fb_shift = np.fft.fftshift(fb)
    fg_shift = np.fft.fftshift(fg)
    fr_shift = np.fft.fftshift(fr)

    # 获取频谱图像
    magnitude_spectrum_b = 20 * np.log(np.abs(fb_shift))
    magnitude_spectrum_g = 20 * np.log(np.abs(fg_shift))
    magnitude_spectrum_r = 20 * np.log(np.abs(fr_shift))

    # 获取图像高度
    height, width = img.shape[:2]

    # 计算周期噪声的频率成分
    dft_height = np.ceil(height / 10)
    cy = np.arange(dft_height, height, dft_height)
    cx = np.arange(width)

    # 将周期噪声的频率成分设置为0
    for y in cy:
        fb_shift[int(y) - 1:int(y) + 1, :] = 0
        fg_shift[int(y) - 1:int(y) + 1, :] = 0
        fr_shift[int(y) - 1:int(y) + 1, :] = 0

    # 进行反傅里叶变换,得到去噪后的图像
    ib = np.fft.ifft2(np.fft.ifftshift(fb_shift))
    ig = np.fft.ifft2(np.fft.ifftshift(fg_shift))
    ir = np.fft.ifft2(np.fft.ifftshift(fr_shift))

    # 将每个通道的结果合并为一张去噪后的彩色图像
    denoised_img = cv2.merge((ib.real, ig.real, ir.real))

    #---------draw figures--------------#
    #plt.imshow(cv2.cvtColor(result, cv2.COLOR_BGR2RGB)),plt.title('task3 output')
    #plt.show()
    
    #---------save figures--------------#
    cv2.imwrite("task3_proc.jpg", denoised_img)

if __name__ == '__main__':
    task_one()
    task_two()
    task_three()

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1307332.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

lammps编译(2Aug2023、intel2020、rtx4070ti)

说明: [rootnode101 ~]# cat /etc/redhat-release CentOS Linux release 7.9.2009 (Core) [rootnode101 ~]# gcc -v Using built-in specs. COLLECT_GCCgcc COLLECT_LTO_WRAPPER/usr/libexec/gcc/x86_64-redhat-linux/4.8.5/lto-wrapper Target: x86_64-redhat-lin…

双十二哪个牌子的电视盒子好用?测评员总结电视盒子品牌排行榜

每次电商大促我会分享好物推荐,本期我要盘点的数码产品是电视盒子,电视盒子的功能和重要性大家都懂,但电视盒子如何选就不太了解了,我根据今年20多次的测评结果整理了电视盒子品牌排行榜,看看哪个牌子的电视盒子好用吧…

beebox靶场A3 low级别 xss通关教程(二)

六:xss get型 eval 通过观察我们可以发现url地址中存在一个date函数 那我们可以试一下把后面的date()函数去掉,直接写入一个alert(555) 发现直接弹出一个框,证明有xss漏洞 七:xss href 直接进入页面会看到是get方法&#xff0c…

HarmonyOS4.0从零开始的开发教程12给您的应用添加弹窗

HarmonyOS(十)给您的应用添加弹窗 概述 在我们日常使用应用的时候,可能会进行一些敏感的操作,比如删除联系人,这时候我们给应用添加弹窗来提示用户是否需要执行该操作,如下图所示: 弹窗是一种…

【51单片机系列】直流电机使用

本文是关于直流电机使用的相关介绍。 文章目录 一、直流电机介绍二、ULN2003芯片介绍三、在proteus中仿真实现对电机的驱动 51单片机的应用中,电机控制方面的应用也很多。在学习直流电机(PWM)之前,先使用GPIO控制电机的正反转和停止。但不能直接使用GPIO…

飞天使-linux操作的一些技巧与知识点4-ansible常用的技巧,配置等

文章目录 ansible配置文件的优先级尝试开始进行操作ansible常用模块ansible 的playbook示例安装phpplaybook中变量的引用 ansible yum install -y ansible 测试是否可用 ansible localhost -m ping /etc/ansible/ansible.cfg :主配置文件,配置 ansible…

3个好用的桌面管理软件!点赞

大家是不是觉得自己的桌面有时候特别乱、上班的时候会影响自己的心情。尤其是一些大企业,干净整洁的桌面是领导必须的要求。 今天就为大家推荐3款好用的桌面管理软件,这其中有的是适合企业用的,有的是适合个人用的,大家可根据自己…

KaiwuDB × 国网山东综能 | 分布式储能云边端一体化项目建设

项目背景 济南韩家峪村首个高光伏渗透率台区示范项目因其所处地理位置拥有丰富的光照资源,该区域住户 80% 以上的屋顶都安装了光伏板。仅 2022 年全年,光伏发电总量达到了百万千瓦时。 大量分布式光伏并网,在输出清洁电力的同时&#xff0c…

全志XR806开发板RTOS环境搭建及问题

测评一 RTOS环境搭建及问题 按照官网文档https://xr806.docs.aw-ol.com/rtos/env/说明,RTOS先拉取SDK,由于XR806是Cortex-M33 Star内核然后指定gcc-arm-none-eabi工具链的位置,再编译再烧录,开发过程和ESP32有些许相似&#xff0c…

深入理解Dubbo-7.服务消费调用源码分析

👏作者简介:大家好,我是爱吃芝士的土豆倪,24届校招生Java选手,很高兴认识大家📕系列专栏:Spring源码、JUC源码、Kafka原理、分布式技术原理🔥如果感觉博主的文章还不错的话&#xff…

媒介盒子:软文推广让你的品牌宣传更高效

软文推广在当今企业的宣传方式中具有至关重要的作用。随着互联网技术的不断发展和社交媒体的广泛使用,软文推广已经成为品牌和广告主的首选。如何在海量信息中脱颖而出,如何让内容在众多信息中获得更高的点击率与转化率,还需要借助软文推广的…

算法通关村第十八关-黄金挑战回溯困难问题

大家好我是苏麟 , 今天带来几道回溯比较困难的题 . 回溯有很多比较难的问题,这里我们看两个,整体来说这两个只是处理略复杂,还不是最难的问题 . 大纲 IP问题 IP问题 描述 : 有效 IP 地址 正好由四个整数(每个整数位于 0 到 255 …

UE5 - ArchvizExplorer与Map Border Collection结合 - 实现电子围栏效果

插件地址: https://www.unrealengine.com/marketplace/zh-CN/product/archviz-explorer https://www.unrealengine.com/marketplace/zh-CN/product/map-border-collection ArchvizExplorer扩展: https://download.csdn.net/download/qq_17523181/8843305…

独热编码和词向量的简单理解

把单词用向量表示,是把深度神经网络语言模型引入自然语言处理领域的一个核心技术。想要让机器理解单词,就必须要把它变成一串数字(向量)。下面介绍的 One-Hot Encoding(One-Hot 编码)和 Word Embedding &am…

【LittleXi】2023 ICPC ECfinal 出线 官方数据 民间预测

【LittleXi】2023 ICPC ECfinal 出线 官方数据 民间预测 说明: 参考去年、前年上海大学,设置210出线队伍 对6场区域赛(不含港澳)走Z字,每个学校最多三支队伍出线 字符串问题,可能会有几个名额失真,比如南…

【unity】【WebRTC】从0开始创建一个Unity远程媒体流app-设置输入设备

【项目源码】 包括本篇需要的脚本都打包在项目源码中,可以通过下面链接下载: 【背景】 目前我们能投射到远端浏览器(或者任何其它Peer)的媒体流只有默认的MainCamera画面,其实我们还可以通过配置输入来传输操作输入信息,比如键鼠等。 【追加input processing组件】 …

PyCharm控制台堆栈乱码问题解决

目录 1、问题描述2、问题原因3、问题解决 1、问题描述 PyCharm环境都已经配置成了UTF-8编码,控制台打印中文也不会出现乱码,但报错堆栈信息中如果有中文会出现中文乱码: 这种该怎么解决呢? 2、问题原因 未将PyCharm编码环境与项目…

Redis - 主从集群下的主从复制原理

主从复制过程 数据同步演变过程 sync 同步 Redis 2.8 版本之前,首次通信成功后, slave 会向 master 发送 sync 数据同步请求。然后 master 就会将其所有数据全部发送给 slave ,由 slave 保存到其本地的持久化文件中。这个过 程…

10个前端开发不容错过的工具网站

作为开发人员,我们经常寻找合适的工具和资源来帮助日常开发工作。但是很多好用的工具网站尤其是国外的网站很多人都错过了。 这里我整理了一份包含 10 个网站的列表,这些网站或许可以帮助到作为前端开发者的你。 1、MDN Web 文档 MDN文档无疑是 Web 开…

Echarts Y轴自定义设置图片

如图Y轴有文字和图片,1-3的图片不同,后面的是特定的css 样式;实现代码 yAxis: {type: category,inverse: true,boundaryGap: false,axisTick: { show: false }, // 是否展示标记点axisLine: { show: false },axisLabel: {// 坐标轴的标签// f…