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)

    # 将周期噪声的频率成分设置为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.mfbz.cn/a/231452.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

“HALCON error #2454:HALCON handle was already cleared in operator set_draw“

分析:错误提示是窗口句柄已经被删除,这是因为前边的一句 HOperatorSet.CloseWindow(hWindowControl1.HalconWindow); 关掉了窗口,屏蔽或删除即可。

在过去的12个月里生成了2亿页的PDF,并识别了31万分钟的音频

在过去的12个月里,生成了2亿页的PDF,并识别了31万分钟的音频。这个项目已经上线了3年,目前有接近400家的医院和法庭接入了这个产品。目前在美国、澳大利亚、印度有多个数据中心。整个产品线有接近1500人的服务团队。

分类预测 | GASF-CNN格拉姆角场-卷积神经网络的数据分类预测

分类预测 | GASF-CNN格拉姆角场-卷积神经网络的数据分类预测 目录 分类预测 | GASF-CNN格拉姆角场-卷积神经网络的数据分类预测分类效果基本描述模型描述程序设计参考资料 分类效果 基本描述 1.GASF-CNN格拉姆角场-卷积神经网络的数据分类预测(完整源码和数据) 2.自…

No CUDA GPUs are available

文章目录 前言尝试方法一、尝试方法一二、尝试方法二 总结 前言 之前用服务器跑的时候,发现是可以跑的。但当有其他人一同使用的时候,就会抛出:No CUDA GPUs are available,这个时候我尝试了以下两种方式解决,后面终于…

移动距离

蓝桥杯其他真题点这里👈 //偶数行需要反转,判断行数时,最后一个需要特判,可以用向上取整 //也可以把传入的值减一,下标从0开始 import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader;public class Main{static…

Zabbix监控腾讯云VPC

一、简介 私有网络(Virtual Private Cloud,VPC)是腾讯云上一块由用户自定义的逻辑隔离网络空间,为云服务器、云数据库等资源提供安全可控的网络环境。通过构建逻辑隔离的、用户自定义配置的网络空间,用户能够提升其云…

坚鹏:兴业银行EAST5.0政策解读及数据质量提升方案培训

兴业银行股份有限公司(简称“兴业银行”)成立于1988年8月,2022年总资产9.27万亿元,是经国务院、中国人民银行批准成立的首批股份制商业银行之一,总行设在福州市。现已发展成为横跨境内外,线上线下结合&…

飞天使-linux操作的一些技巧与知识点2

TCP 的三次握手 第一次,客户端与服务端建立链接,需要发送请求连接的消息 第二次,服务端接口到数据后,返回一个确认的操作*(至此客户端和服务端链路建立成功) 第三次,服务端还需要发送要与客户端…

网络入门---网络编程初步认识和实践(使用udp协议)

目录标题 前言准备工作udpserver.hpp成员变量构造函数初始化函数(socket,bind)start函数(recvfrom) udpServer.ccudpClient.hpp构造函数初始化函数run函数(sendto) udpClient.cc测试 前言 在上一篇文章中我们初步的认识了端口号的作用,ip地址和MAC地址在网络通信时…

【记忆】施密特正交化

图片源自https://www.zhihu.com/question/485986805

学员自创“编程羔手”,作为新手来看待攻城狮,程序猿,码农,码奴,码畜...

在编程的世界里,我们就是那些编程羔手,如同懵懂的羔羊一样,刚刚踏入代码的草原。我们是攻城狮的侄子,程序猿的徒弟,码农的学徒,尚未尝过码奴的辛酸,更没有领略过码畜的无奈。我们是那些初出茅庐…

idea import 不让打包时自动带*

场景 因为多人开发,合代码时经常发现因自动import带*了,导致各种问题。 解决

视觉检测系统在半导体行业的应用

一、半导体产业链概述 半导体产业链是现代电子工业的核心组成部分,涵盖了从原材料到最终产品的整个生产过程。这个产业链主要分为以下几个环节: 1.原材料供应:半导体行业的基石是半导体材料,如硅片、化合物半导体等。这些材料需要…

EP15:动态内存管理概述(c语言)malloc,calloc,realloc函数的介绍使用及柔性数组的介绍

如果学习方向是c方向那么c语言有三个板块的知识是非常重要的. 1:指针 2:结构体 3;动态内存管理. 序言:在c语言中,什么是动态内存 C语言中的动态内存是指在程序运行时,根据需要动态地分配内存空间的一种内存管理方式。与静态内存相比,动态内存的大小和生…

详细了解STM32----GPIO

提示:永远支持免费开源知识文档,喜欢的点个关注吧!谢谢! 文章目录 一、什么是GPIO?二、GPIO基本结构三、GPIO的输入输出模式1、推挽输出2、开漏输出3、复用推挽4、复用开漏1、浮空输入2、上拉输入3、下拉输…

大模型对数据分布变化的鲁棒性研究综述

摘要: 标准机器学习的一个主要限制是它产生的模型对分布变化不鲁棒,其中训练分布与测试分布不匹配(对于下游任务)。现有的工作表明,调整在广泛的未标记数据上训练的基础模型可以提高适应模型在各种变化中的鲁棒性。这为…

代码序随想录二刷 |二叉树 | 二叉树的层序遍历II

代码序随想录二刷 |二叉树 | 二叉树的层序遍历II 题目描述解题思路代码实现 题目描述 107.二叉树的层序遍历II 给你二叉树的根节点 root ,返回其节点值 自底向上的层序遍历 。 (即按从叶子节点所在层到根节点所在的层&#xff0…

pta模拟题——7-34 刮刮彩票

“刮刮彩票”是一款网络游戏里面的一个小游戏。如图所示: 每次游戏玩家会拿到一张彩票,上面会有 9 个数字,分别为数字 1 到数字 9,数字各不重复,并以 33 的“九宫格”形式排布在彩票上。 在游戏开始时能看见一个位置上…

基于JAVA+SpringBoot+Vue的前后端分离的旅游网站

✌全网粉丝20W,csdn特邀作者、博客专家、CSDN新星计划导师、java领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ 🍅文末获取项目下载方式🍅 一、项目背景介绍: 近年来,随…