HNU计算机视觉作业一

前言

选修的是蔡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)# 将周期噪声的频率成分设置为0for y in cy:fb_shift[int(y) - 1:int(y) + 1, :] = 0fg_shift[int(y) - 1:int(y) + 1, :] = 0fr_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 pltdef 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)# 将周期噪声的频率成分设置为0for y in cy:fb_shift[int(y) - 1:int(y) + 1, :] = 0fg_shift[int(y) - 1:int(y) + 1, :] = 0fr_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.mzph.cn/news/218566.shtml

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

相关文章

LeetCode力扣每日一题(Java):58、最后一个单词的长度

一、题目 二、解题思路 1、我的思路 先将字符串转换成字符数组 由于我们需要获取最后一个单词的长度,所以我们从后往前遍历字符数组 我们还需判断所遍历的字符是不是字母,即判断每个字符对应的ASCII值即可,用计数器count来储存单词长度 …

【RHEL9】Fatal glibc error: CPU does not support x86-64-v2

问题描述 RHEL 9要求x86_64的CPU支持x86-64-v2,x86-64-v2需要处理器支持 CMPXCHG16B、LAHF-SAHF、POPCNT、SSE3、SSE4.1、SSE4.2、SSSE3 等现代指令集 检查CPU是否支持x86-64-v2的方法 #!/bin/sh flags$(cat /proc/cpuinfo | grep flags | head -n 1 | cut -d: -…

1分钟让你快速了解私域运营流量增长底层逻辑!

私域运营说的直白一点,其实就是将用户引入到私域矩阵中,持续性的付费转化,维护好老顾客的同时,并通过他们分享裂变,低成本吸引新客户,再用不同的营销玩法,将新客户转化为老客户的一系列过程。

使用HTTP协议在Linux上进行API调用

在Linux系统上使用HTTP协议进行API调用是一种常见的操作,有时候我们需要调用一些外部API来获取数据或者进行自动化操作。下面是一个使用HTTP协议在Linux上进行API调用的代码示例,希望能够帮助你更好地理解这个过程。 首先,我们需要使用curl命…

【同步FIFO_2023.12.13】

同步fifo,写时钟和读时钟为同一个时钟,用于交互数据缓冲 fifo的深度:同一块数据内存的大小 reg [2:0] Mem [8];//宽度3,深度8典型同步fifo的三部分 fifo写控制逻辑:写地址、写有效信号,fifo写满、写错等状…

金数据企业版:广告推广效率提升的关键,无代码API集成与连接技术

深入理解无代码开发与API集成的重要性 在当今的电商竞争环境下,企业必须寻找提高效率和灵活性的办法。无代码开发平台,如金数据,提供了一种创新的方式来应对快速变化的市场需求,特别是在API集成方面。无代码开发意味着企业可以通…

减持股份对股票的影响,好还是不好?

减持股份对股票是好还是不好?这是一个很多投资者都关心的问题,因为减持股份会影响股票的价格、流动性和信心。减持股份的原因和影响是多方面的,没有一个简单的答案,需要根据具体的情况进行分析。下面,我将从几个方面来…

MT1527 回文串

利用指针判断字符串是否为回文。(正读和反读都一样的字符串) 输入格式&#xff1a; 输入字符串 输出格式&#xff1a; 输出YES或者NO 输入&#xff1a; wenew 输出&#xff1a; YES #include <iostream> #include <algorithm> #include <string> using …

云渲染怎么提升效果图的画质?云渲染对效果图未来影响

在当今高速发展的视觉设计行业中&#xff0c;高质量的效果图不仅是展示设计成果的重要手段&#xff0c;也是设计沟通和营销的关键。无论是建筑设计、室内设计还是工业样品的视觉化&#xff0c;效果图的精细程度与渲染速度对项目的成功至关重要。对于许多追求卓越和效率的设计师…

编写一个简易的 Axios 函数

编写一个简易的 Axios 函数&#xff1a;从零开始创建你自己的网络请求工具 当我们开始构建自己的网络请求工具时&#xff0c;不禁思考着&#xff1a;在现代的网络开发中&#xff0c;Axios等工具库如此受欢迎&#xff0c;其背后的原理是什么&#xff1f;这篇文章将带你踏上一个…

苹果电脑Python编辑开发软件pycharm pro 2023功能介绍

PyCharm Pro 2023是由JetBrains开发的一款专为Python开发者设计的跨平台集成开发环境&#xff08;IDE&#xff09;。它提供了丰富的功能和直观的用户界面&#xff0c;旨在提高在Mac平台上进行Python编程的效率。 PyCharm Pro 2023是PyCharm系列中的专业版&#xff0c;具有更多高…

一篇很不错的小作文:读“战争与和平” 有感、识之

如果一个人不读书&#xff0c;就会像没了水的鱼&#xff0c;毫无生存的希望。 我最近在看一本名叫《战争与和平》的书&#xff0c;书中的一句话让我印象深刻&#xff1a;“战争是残酷的&#xff0c;它带来了破坏和死亡&#xff0c;但和平却是美好的&#xff0c;它给予我们希望和…

什么?通过 Prometheus 编写巡检脚本

原文来源&#xff1a; https://tidb.net/blog/894d0118 背景 笔者最近在驻场&#xff0c;发现这里的 tidb 集群是真的多&#xff0c;有将近150套集群。而且集群少则6个节点起步&#xff0c;多则有200多个节点。在这么庞大的集群体量下&#xff0c;巡检就变得非常的繁琐了。…

【Android】完美解决安卓报错Module entity with name: xxx should be available、No module问题

问题截图&#xff1a; 解决方法&#xff1a; 找到settiings.gradle文件&#xff0c;修改文件名称&#xff0c;比较项目名大小写&#xff0c;更改之后&#xff0c;果然解决了

【C语言】操作符详解(二)

目录 移位操作符 左移操作符 右移操作符 位操作符:&、|、^、~ 一道面试题 移位操作符 <<左移操作符 >>右移操作符注:移位…

智能优化算法应用:基于布谷鸟算法3D无线传感器网络(WSN)覆盖优化 - 附代码

智能优化算法应用&#xff1a;基于布谷鸟算法3D无线传感器网络(WSN)覆盖优化 - 附代码 文章目录 智能优化算法应用&#xff1a;基于布谷鸟算法3D无线传感器网络(WSN)覆盖优化 - 附代码1.无线传感网络节点模型2.覆盖数学模型及分析3.布谷鸟算法4.实验参数设定5.算法结果6.参考文…

点评项目——用户签到模块

2023.12.13 通常app为了吸引用户每天登陆app&#xff0c;会设定一个签到模块&#xff0c;本章就来实现用户签到模块&#xff0c;包含签到功能和签到统计功能。 BitMap用法 通常使用二进制位来记录每个月的签到情况&#xff0c;签到记录为1&#xff0c;未签到记录为0。每一个bi…

MacOS环境配置一系列问题的汇总,方便以后自己查看

环境配置一系列问题的汇总&#xff0c;方便以后自己查看 man brew报错“No manual entry for brew” 解决方法记录&#xff1a; 解决问题之前尝试的方法&#xff1a; Linking manuals from Homebrew1 https://apple.stackexchange.com/questions/111061/linking-manuals-f…

2000-2022年上市公司数字化转型数据(年报词频、文本统计)

2000-2022年上市公司数字化转型数据&#xff08;年报词频、文本统计&#xff09; 1、时间&#xff1a;2000-2022年 2、来源&#xff1a;上市公司年报、巨潮资讯网 3、方法说明&#xff1a;参考管理世界中吴非&#xff08;2021&#xff09;的做法&#xff0c;对人工智能技术、…

做题总结 19. 删除链表的倒数第 N 个结点(快慢指针思想)

19. 删除链表的倒数第 N 个结点 最初的想法进阶实现&#xff08;Java&#xff09; 最初的想法 计算出链表中的节点总数&#xff0c;然后遍历找到目标节点并删除。 class Solution {public ListNode removeNthFromEnd(ListNode head, int n) {ListNode cur head;int count0;w…