当前位置: 首页 > news >正文

CV(3)--噪声滤波和特征

前言

仅记录学习过程,有问题欢迎讨论

图像噪声(需要主动干扰的场景):
  • 添加高斯噪声:概率密度函数服从高斯分布的一类噪声
    通过设置sigma和mean生成符合高斯分布的随机数,然后计算输出像素,放缩到0-255,循环所有像素,输出图像。

  • 添加椒盐噪声:随机出现的白点或者黑点
    设置信噪比SNR,总数SR,加噪的数量为SNR*SR;随机指定像素位置,指定像素点为0或者255,,输出图像。

图像滤波(消除噪声):
目的: 消除图像中混入的噪声;为图像识别抽取出图像特征。

  • 均值滤波:取像素平均值,替换中心像素值,计算速度快,算法简单;
    降低噪声的同时使图像产生模糊,特别是景物的边缘和细节部分

  • 中值滤波:取像素中值,替换中心像素值,计算速度慢,算法复杂;
    抑制效果很好,画面的清析度基本保持;对高斯噪声的抑制效果不是很好

  • 最大最小值滤波:排序替换中心为最大or最小值

  • 引导滤波:当需要求该函数上某一点的值时,只需计算所有包含该点的线性函数的值并做平均即可。这种模型,在表示非解析函数上,非常有用

图像增强:
点处理技术。只对单个像素进行处理。

  1. 线性变换:图像增强线性变换主要对图像的对比度和亮度进行调整
  2. 分段线性变换:对处于某个感兴趣的区域的x,将其对比度系数a增大或减小,从而增大或减小这个区域的对比度
  3. 对数变换:对数变换将图像的低灰度值部分扩展,将其高灰度值部分压缩,以达到强调图像低灰度部分的目的;
  4. 幂律变换:主要用于图像的校正,对漂白的图片或者是过黑的图片进行修正

领域处理技术。对像素点及其周围的点进行处理,即使用卷积核

  1. 直方图均衡化
  2. 各种滤波

特征选择(3选2):
选择尽可能少的子特征,模型的效果不会显著下降,并且结果的类别分布尽可能的接近真实的类别分布
目的:降维 提升效率 降低学习难度

特征提取(3变为2)
提取特征可以组合新的特征,和特征选择一致都属于降维

  • 基于图像传统特征

    • 主成分分析PCA(投影降维):
      目标:降维后同一维度的方差最大(差异大,可以体现区别),不同维度之间的相关性为0
    1. 对原始数据零均值化(中心化):平移使得所有数据的中心为0,0
    2. 求协方差矩阵(同一样本):按照不同维度求协方差矩阵求均值,体现特征之间相关性
    3. 对协方差矩阵求特征向量和特征值,这些特征向量组成了新的特征空间。
    4. 按照特征值大小排序,选择前n(降的维度)个特征向量,组成新的特征空间(基底)
    5. 将原始数据投影到新的特征空间,得到降维后的数据
  • 基于深度学习特征:CNN

高斯/椒盐噪声和PCA的实现

"""
week4 work
1.实现高斯噪声和椒盐噪声
2.实现PCA
"""
import randomimport cv2
import matplotlib.pyplot as plt
import numpy as np
import sklearn.decomposition as dp# 添加高斯噪声
def GaussianNoise(img, mean, sigma, per):img_gus = img.copy()# 随机的像素点个数random_num = int(img.shape[0] * img.shape[1] * per)for i in range(random_num):# 随机像素点random_x = random.randint(0, img.shape[0] - 1)random_y = random.randint(0, img.shape[0] - 1)img_gus[random_x, random_y] = img_gus[random_x, random_y] + random.gauss(mean, sigma)# 若灰度值小于0则强制为0,若灰度值大于255则强制为255if img_gus[random_x, random_y] < 0:img_gus[random_x, random_y] = 0elif img_gus[random_x, random_y] > 255:img_gus[random_x, random_y] = 255return img_gus# 添加椒盐噪声
def SaltAndPepperNoise(img, per):img_sp = img.copy()# 随机的像素点个数random_num = int(img.shape[0] * img.shape[1] * per)for i in range(random_num):# 随机像素点random_x = random.randint(0, img.shape[0] - 1)random_y = random.randint(0, img.shape[0] - 1)# 随机黑白点if random.random() >= 0.5:img_sp[random_x, random_y] = 0else:img_sp[random_x, random_y] = 255return img_sp# 实现PCA 降维
def PCA(data, k):# 计算均值mean = np.mean(data, axis=0)# 矩阵中心化data_mean = data - mean# 计算协方差矩阵cov = np.cov(data_mean, rowvar=False)# 计算特征值和特征向量eig_vals, eig_vecs = np.linalg.eig(cov)# 将特征值和特征向量组合成元组列表,并按特征值从大到小排序eig_pairs = [(np.abs(eig_vals[i]), eig_vecs[:, i]) for i in range(len(eig_vals))]print('特征值和特征向量:\n', eig_pairs)# 按特征值从大到小排序eig_pairs.sort(key=lambda x: x[0], reverse=True)# 对特征向量降为为k个维度eig_vecs = [eig_pairs[i][1] for i in range(k)]# 转化为array 3×2eig_vecs = np.transpose(eig_vecs)print('eig_vecs:\n', eig_vecs)# # 将特征向量组合成矩阵# 将数据投影到特征向量上data_pca = np.dot(data, eig_vecs)# 返回降维后的数据return data_pca# img = cv2.imread("lenna.png", 0)  # 注意后面参数 为0 变为一个通道
# cv2.imshow("original", img)
# img_gus = GaussianNoise(img, 2, 4, 0.8)
# cv2.imshow("gus_img", img_gus)# img_sp = SaltAndPepperNoise(img, 0.2)
# cv2.imshow("sp_img", img_sp)
# cv2.waitKey(0)X = np.array([[10, 15, 29],[15, 46, 13],[23, 21, 30],[11, 9,  35],[42, 45, 11],[9,  48, 5],[11, 21, 14],[8,  5,  15],[11, 12, 21],[21, 20, 25]])
K = np.shape(X)[1] - 1
print('样本集(10行3列,10个样例,每个样例3个特征):\n', X)
pca = PCA(X,K)
print('降维后的样本集:\n', pca)
http://www.lryc.cn/news/500841.html

相关文章:

  • LDR6500:音频双C支持,数字与模拟的完美结合
  • python web app开发
  • redis数据结构和内部编码及单线程架构
  • 【unity小技巧】分享vscode如何进行unity开发,且如何开启unity断点调试模式,并进行unity断点调试(2024年最新的方法,实测有效)
  • AI大模型学习笔记|人工智能的发展历程、智能体的发展、机器学习与深度学习的基本理论
  • C#实现一个HttpClient集成通义千问-多轮对话功能实现
  • Java Web 7 请求响应(Postman)
  • Android APP自学笔记
  • Linux 系统报打开的文件过多
  • javaWeb之过滤器(Filter)
  • ModStartBlog v10.0.0 发布时间自定义,多图快速粘贴,博客编辑器升级
  • Unexpected token ‘<‘, “<!doctype “... is not valid JSON
  • 24/12/9 算法笔记<强化学习> PPO,DPPO
  • Linux下编译安装METIS
  • 【数据库】关系代数和SQL语句
  • amazon亚马逊滑动识别验证码
  • Android Studio 创建虚拟设备的详细图文操作教程
  • 网络安全法-附则
  • CSS核心(上)
  • 深度学习常用损失函数介绍
  • HarmonyOS-中级(四)
  • React v19稳定版发布12.5
  • 【毕业设计选题】深度学习类毕业设计选题参考 开题指导
  • NanoLog起步笔记-4-Server端的两个线程
  • linux zookeeper安装并服务化
  • 很简单,但是很实用。把docker run改写成docker compose。
  • DAMODEL丹摩|丹摩平台:AI时代的开发者福音
  • 全面解析租赁小程序的功能与优势
  • VRRP的知识点总结及实验
  • 商业银行基于容器云的分布式数据库架构设计与创新实践