3-1
(1) 感觉就是图像模糊了,并没有去噪

from cv2 import cv2
import numpy as np
import randomdef spNoise(img,prob):# 添加椒盐噪声,prob:噪声比例 output = np.zeros(img.shape,np.uint8)thres = 1 - prob for i in range(img.shape[0]):for j in range(img.shape[1]):rdn = random.random()if rdn < prob:output[i][j] = 0elif rdn > thres:output[i][j] = 255else:output[i][j] = img[i][j]return outputdef gaussNoise(img, mean=0, var=0.0001):# 添加,高斯噪声mean : 均值,var : 方差img = np.array(img/255, dtype=float)noise = np.random.normal(mean, var ** 0.5, img.shape)out = img + noiseif out.min() < 0:low_clip = -1.else:low_clip = 0.out = np.clip(out, low_clip, 1.0)out = np.uint8(out*255)return outdef meanFilter(img, c):# 均值滤波,2c+1*2c+1矩阵取平均值img_shape = np.shape(img)out = np.zeros(img_shape)for i in range(img_shape[0]):for j in range(img_shape[1]):if i >= c and i < img_shape[0] - c and j >= c and j < img_shape[1] - c:out[i][j] = min(sum(img[i - c:i + c + 1, j - c:j + c + 1].flatten()) // ((2 * c + 1) * (2 * c + 1)), img[i][j])else:out[i][j] = img[i][j]return outdef medianFilter(img, c):# 中值滤波,2c+1*2c+1矩阵再取中值img_shape = np.shape(img)out = np.zeros(img_shape)for i in range(img_shape[0]):for j in range(img_shape[1]):if i >= c and i < img_shape[0] - c and j >= c and j < img_shape[1] - c:out[i][j] = medianValueOdd(img[i - c:i + c + 1, j - c:j + c + 1].flatten())else:out[i][j] = img[i][j]return outdef medianValueOdd(arr):# 希尔排序length = len(arr)gap = length//2while gap > 0:for i in range(gap, length):tem = arr[i]j = i while  j >= gap and arr[j-gap] >tem: arr[i], arr[i - gap] = arr[i - gap], arr[i]j -= gap gap = gap // 2return arr[length//2]img = cv2.imread("C:\\test\\1.jpg")
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)img_noise = spNoise(gray, 0.0005)
img_noise = gaussNoise(img_noise)img_mean_filter1 = meanFilter(img_noise, 1)
img_mean_filter2 = meanFilter(img_noise, 2)
img_mean_filter3 = meanFilter(img_noise, 3)
img_median_filter1 = medianFilter(img_noise, 1)
img_median_filter2 = medianFilter(img_noise, 2)
img_median_filter3 = medianFilter(img_noise, 3)cv2.imwrite("C:\\test\\img_mean_filter1.jpg", img_mean_filter1)
cv2.imwrite("C:\\test\\img_mean_filter2.jpg", img_mean_filter2)
cv2.imwrite("C:\\test\\img_mean_filter3.jpg", img_mean_filter3)
cv2.imwrite("C:\\test\\img_median_filter1.jpg", img_median_filter1)
cv2.imwrite("C:\\test\\img_median_filter2.jpg", img_median_filter2)
cv2.imwrite("C:\\test\\img_median_filter3.jpg", img_median_filter3)img_mean_filter1 = cv2.imread("C:\\test\\img_mean_filter1.jpg")
img_mean_filter2 = cv2.imread("C:\\test\\img_mean_filter2.jpg")
img_mean_filter3 = cv2.imread("C:\\test\\img_mean_filter3.jpg")
img_median_filter1 = cv2.imread("C:\\test\\img_median_filter1.jpg")
img_median_filter2 = cv2.imread("C:\\test\\img_median_filter2.jpg")
img_median_filter3 = cv2.imread("C:\\test\\img_median_filter3.jpg")cv2.imshow('gray', gray)
cv2.imshow('img_noise', img_noise)
cv2.imshow('img_mean_filter1', img_mean_filter1)
cv2.imshow('img_mean_filter2', img_mean_filter2)
cv2.imshow('img_mean_filter3', img_mean_filter3)
cv2.imshow('img_median_filter1', img_median_filter1)
cv2.imshow('img_median_filter2', img_median_filter2)
cv2.imshow('img_median_filter3', img_median_filter3)
cv2.waitKey()
cv2.destroyAllWindows

4-1
(2)使用K邻近滤波和对称邻近滤波,发现K邻近滤波时,若仅取K=3,会产生很多早点,取K=5,K=7时,能有效去噪

from cv2 import cv2
import numpy as np
import randomdef spNoise(img,prob):# 添加椒盐噪声,prob:噪声比例 output = np.zeros(img.shape,np.uint8)thres = 1 - prob for i in range(img.shape[0]):for j in range(img.shape[1]):rdn = random.random()if rdn < prob:output[i][j] = 0elif rdn > thres:output[i][j] = 255else:output[i][j] = img[i][j]return outputdef gaussNoise(img, mean=0, var=0.0001):# 添加,高斯噪声mean : 均值,var : 方差img = np.array(img/255, dtype=float)noise = np.random.normal(mean, var ** 0.5, img.shape)out = img + noiseif out.min() < 0:low_clip = -1.else:low_clip = 0.out = np.clip(out, low_clip, 1.0)out = np.uint8(out*255)return outdef shellSort(arr):# 希尔排序length = len(arr)gap = length//2while gap > 0:for i in range(gap, length):tem = arr[i]j = i while  j >= gap and arr[j-gap] >tem: arr[i], arr[i - gap] = arr[i - gap], arr[i]j -= gap gap = gap // 2return arrdef kNeighborFilter(img, N):square = N * NK = 2 * N - 1q = N // 2img_shape = np.shape(img)out = np.zeros(img_shape)for i in range(img_shape[0]):for j in range(img_shape[1]):if i >= q and i < img_shape[0] - q and j >= q and j < img_shape[1] - q:img_flatten = img[i - q:i + q + 1, j - q:j + q + 1].flatten()arr = np.append(img_flatten[0:square // 2], (img_flatten[square // 2 + 1:]))arr = shellSort(arr)p = 0while p < len(arr)-1:if arr[p] > img[i][j]:breakif arr[p] <= img[i][j] and arr[p + 1] >= img[i][j]:breakp += 1if p < K // 2:out[i][j] = sum(arr[0:K]) // Kelif p > square - K // 2:out[i][j] = sum(arr[square - K:]) // Kelse:out[i][j] = sum(arr[p - K // 2:p + K // 2 + 1]) // Kelse:out[i][j] = img[i][j]return outdef symmetricNeighborFilter(img, N):p = N // 2img_shape = np.shape(img)out = np.zeros(img_shape)for i in range(img_shape[0]):for j in range(img_shape[1]):if i >= p and i < img_shape[0] - p and j >= p and j < img_shape[1] - p:tem = []for k in range(i - p, i + p + 1):for l in range(j - p, j):tem.append([img[k][l], img[2 * i - k][2 * j - l]])for k in range(i - p, i):tem.append([img[k, j], img[2 * i - k][j]])total = 0print(tem)for m in range(len(tem)):if abs(tem[m][0] - img[i][j]) < abs(tem[m][1] - img[i][j]):total += tem[m][0]else:total += tem[m][1]print(total)out[i][j] = total // len(tem)print(out[i][j])else:out[i][j] = img[i][j]return outimg = cv2.imread("C:\\test\\1.jpg")
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)img_noise = spNoise(gray, 0.0005)
img_noise = gaussNoise(img_noise)k_neighbor_filter1 = kNeighborFilter(img_noise, 3)
k_neighbor_filter2 = kNeighborFilter(img_noise, 5)
k_neighbor_filter3 = kNeighborFilter(img_noise, 7)
symmetric_neighbor_filter1 = symmetricNeighborFilter(img_noise, 3)
symmetric_neighbor_filter2 = symmetricNeighborFilter(img_noise, 5)
symmetric_neighbor_filter3 = symmetricNeighborFilter(img_noise, 7)cv2.imwrite("C:\\test\\kNeighborFilter3.jpg", k_neighbor_filter1)
cv2.imwrite("C:\\test\\kNeighborFilter5.jpg", k_neighbor_filter2)
cv2.imwrite("C:\\test\\kNeighborFilter7.jpg", k_neighbor_filter3)
cv2.imwrite("C:\\test\\symmetricNeighborFilter3.jpg", symmetric_neighbor_filter1)
cv2.imwrite("C:\\test\\symmetricNeighborFilter5.jpg", symmetric_neighbor_filter2)
cv2.imwrite("C:\\test\\symmetricNeighborFilter7.jpg", symmetric_neighbor_filter3)k_neighbor_filter1 = cv2.imread("C:\\test\\kNeighborFilter3.jpg")
k_neighbor_filter2 = cv2.imread("C:\\test\\kNeighborFilter5.jpg")
k_neighbor_filter3 = cv2.imread("C:\\test\\kNeighborFilter7.jpg")
symmetric_neighbor_filter1 = cv2.imread("C:\\test\\symmetricNeighborFilter3.jpg")
symmetric_neighbor_filter2 = cv2.imread("C:\\test\\symmetricNeighborFilter5.jpg")
symmetric_neighbor_filter3 = cv2.imread("C:\\test\\symmetricNeighborFilter7.jpg")cv2.imshow('gray', gray)
cv2.imshow('img_noise', img_noise)
cv2.imshow('kNeighborFilter3', k_neighbor_filter1)
cv2.imshow('kNeighborFilter5', k_neighbor_filter2)
cv2.imshow('kNeighborFilter7', k_neighbor_filter3)
cv2.imshow('kNeighborFilter3', symmetric_neighbor_filter1)
cv2.imshow('kNeighborFilter5', symmetric_neighbor_filter2)
cv2.imshow('kNeighborFilter7', symmetric_neighbor_filter3)
cv2.waitKey()
cv2.destroyAllWindows

4-1(3)看起来开运算去掉了白点,闭运算去掉了黑点

from cv2 import cv2
import numpy as np
import randomdef spNoise(img,prob):# 添加椒盐噪声,prob:噪声比例 output = np.zeros(img.shape,np.uint8)thres = 1 - prob for i in range(img.shape[0]):for j in range(img.shape[1]):rdn = random.random()if rdn < prob:output[i][j] = 0elif rdn > thres:output[i][j] = 255else:output[i][j] = img[i][j]return outputdef gaussNoise(img, mean=0, var=0.0001):# 添加,高斯噪声mean : 均值,var : 方差img = np.array(img/255, dtype=float)noise = np.random.normal(mean, var ** 0.5, img.shape)out = img + noiseif out.min() < 0:low_clip = -1.else:low_clip = 0.out = np.clip(out, low_clip, 1.0)out = np.uint8(out*255)return outdef grayErosion(img, N):arr = np.ones((N, N))p = N // 2img_shape = np.shape(img)out = np.zeros(img_shape)for i in range(img_shape[0]):for j in range(img_shape[1]):if i >= p and i < img_shape[0] - p and j >= p and j < img_shape[1] - p:out[i][j] = max(0, min(img[i - p:i + p + 1, j - p:j + p + 1].flatten()-arr.flatten()))else:out[i][j] = img[i][j]return outdef grayScale(img, N):arr = np.ones((N, N))p = N // 2img_shape = np.shape(img)out = np.zeros(img_shape)for i in range(img_shape[0]):for j in range(img_shape[1]):if i >= p and i < img_shape[0] - p and j >= p and j < img_shape[1] - p:out[i][j] = min(255, max(img[i - p:i + p + 1, j - p:j + p + 1].flatten()-arr.flatten()))else:out[i][j] = img[i][j]   return outdef openFilter(img, arr):return grayScale(grayErosion(img, arr), arr)def closeFilter(img, arr):return grayErosion(grayScale(img, arr), arr)img = cv2.imread("C:\\test\\1.jpg")
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)img_noise = spNoise(gray, 0.0005)
img_noise = gaussNoise(img_noise)image_open_filter = openFilter(img_noise, 3)
image_close_filter = closeFilter(img_noise, 3)cv2.imwrite("C:\\test\\image_open_filter.jpg", image_open_filter)
cv2.imwrite("C:\\test\\image_close_filter.jpg", image_close_filter)image_open_filter = cv2.imread("C:\\test\\image_open_filter.jpg")
image_close_filter = cv2.imread("C:\\test\\image_close_filter.jpg")cv2.imshow('gray', gray)
cv2.imshow('img_noise', img_noise)
cv2.imshow('image_open_filter', image_open_filter)
cv2.imshow('image_close_filter', image_close_filter)
cv2.waitKey()
cv2.destroyAllWindows

数字图像处理基础与应用 第四章相关推荐

  1. 数字图像处理学习笔记4第四章 图像变换 附实验

    第四章 图像变换 附实验 前言 图像变换:为达到某种目的将原始图像变换映射到另一个空间上,使得图像的某些特征得以突出,以便于后面的处理和识别. 4.1连续傅里叶变换 一维变换 用傅里叶变换表示的函数特 ...

  2. (数字图像处理MATLAB+Python)第四章图像正交变换-第一节:离散傅里叶变换

    文章目录 一:一维离散傅里叶变换 (1)定义 (2)实例 二:一维快速傅里叶变换 (1)定义 (2)实例 三:二维离散傅里叶变换 (1)定义 (2)程序 四:二维离散傅里叶变换的性质 (1)可分性 ( ...

  3. 数字图像处理基础与应用 第五章

    5-1感觉这些方法主体都差不多,就是微分算子不同,懒得一个个写了 from cv2 import cv2 import numpy as np import randomdef singleDirec ...

  4. 图像处理-离散傅里叶变换-数字图像处理第三版第四章内容

    图像傅里叶变换方法有很多,可以通过空间光调制器输入图像后在通过平行光照明经过傅里叶变换透镜进行傅里叶变换,另一个方法就是利用计算机进行傅里叶变换,其中傅里叶变换有两种算法一种是DFT还有一种是FFT( ...

  5. [Python图像处理] 三十四.数字图像处理基础与几何图形绘制万字详解(推荐)

    该系列文章是讲解Python OpenCV图像处理知识,前期主要讲解图像入门.OpenCV基础用法,中期讲解图像处理的各种算法,包括图像锐化算子.图像增强技术.图像分割等,后期结合深度学习研究图像识别 ...

  6. 数字图像处理领域的二十四个典型算法及vc实现、第一章

    数字图像处理领域的二十四个典型算法及vc实现.第一章 作者:July   二零一一年二月二十六日. 参考:百度百科.维基百科.vc数字图像处理. --------------------------- ...

  7. 《数字图像处理》读书笔记2:数字图像处理基础

    <数字图像处理>读书笔记2:数字图像处理基础 1 人类视觉感知 1.1 眼睛构造图 1.2 基本概念: 1.2.1 亮度适应(Brightness Adaptation) 1.2.2 主观 ...

  8. 数字图像处理领域的二十四个典型算法

    数字图像处理领域的二十四个典型算法及vc实现.第一章 一.256色转灰度图 二.Walsh变换 三.二值化变换 四.阈值变换 五.傅立叶变换 六.离散余弦变换 数字图像处理领域的二十四个典型算法及vc ...

  9. 【深度学习】深入浅出数字图像处理基础(模型训练的先修课)

    [深度学习]深入浅出数字图像处理基础(模型训练的先修课) 文章目录 1 图像的表示 2 图像像素运算 3 采样与量化3.1 采样3.2 量化3.3 图像上采样与下采样 4 插值算法分类 5 什么是池化 ...

最新文章

  1. Windows 安装MySQL5.7.0+ 服务
  2. Veritas Storage Foundation 5.0 HA for Windows
  3. TCP三次握手,握的是啥?
  4. 从身体扮演到身份确认:谈谈EMI的人体自拍作品
  5. String转Double
  6. 深度学习精度提升 3 个小妙招:模型集成、知识蒸馏、自蒸馏
  7. 12123两小时没付款怎么办_交管12123支付宝小程序付款不了怎么办 交管12123支付宝缴费方法介绍[多图]...
  8. MongoDB两阶段提交实现事务
  9. sublime text 3 package control
  10. bat shell 命令行中 21 的含义
  11. coursera和udacity_从Udacity和Coursera进行深度学习
  12. 万字详述推荐系统经典模型DCN,DCN_v2,PNN
  13. 蓝牙相关Profiles
  14. 递归实现输出一个整数的逆序
  15. 读书笔记:司马迁《史记》之孝文本纪
  16. 如何设置云服务器语言,云服务器如何更换语言
  17. CSS-标准盒模型和IE6混杂模式
  18. 检测JS数据类型的方法
  19. 关于汽车隔音和音响改装,难听,但确是实话
  20. Mifare l射频卡初始值及其相关说明

热门文章

  1. UISwitch 添加 标签
  2. 第八章 基本脚本编译
  3. 解决我的windows不是正版的方法?
  4. linux ssh-add,linux – 如何使ssh-add从文件读取密码?
  5. Mysql varchar 字节长度
  6. java continue goto_Java中goto和break、continue实现区别
  7. jvm内存模型_四种视角看JVM内存模型
  8. linux解释名词shell环境,Linux 定时任务
  9. apache目录 vscode_VsCode搭建Java开发环境(Spring Boot项目创建、运行、调试)
  10. suse linux增加新磁盘分区,Virtualbox中Linux添加新磁盘并创建分区