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

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 random

import 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则强制为255
        if img_gus[random_x, random_y] < 0:
            img_gus[random_x, random_y] = 0
        elif img_gus[random_x, random_y] > 255:
            img_gus[random_x, random_y] = 255
    return 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] = 0
        else:
            img_sp[random_x, random_y] = 255
    return 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×2
    eig_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.kler.cn/a/429878.html

相关文章:

  • 如何修改 Go 结构体的私有字段
  • 大数据-245 离线数仓 - 电商分析 缓慢变化维 与 拉链表 SCD Slowly Changing Dimensions
  • 项目中使用AntV L7地图(五)添加飞线
  • Linux驱动开发(12):中断子系统–按键中断实验
  • 超标量处理器设计笔记(5)虚拟存储器、地址转换、page fault
  • LeetCode:459.重复的子字符串
  • 提升网站流量的关键:AI在SEO关键词优化中的应用
  • Halcon 深度学习目标分类:原理与应用全解析
  • React第十八章(useImperativeHandle)
  • 学在西电录播课使用python下载,通过解析m3u8协议、多线程下载ts视频块以及ffmpeg合并
  • Spring:自定义的bean对象
  • 普通算法——埃氏筛
  • 基于单片机的汽车雨刷器装置
  • 酷柚易汛生产管理系统PHP+Uniapp
  • Excel VBA学习系列汇总20241205
  • 使用paho.mqtt.cpp库实现ssl/tls加密通信
  • NanoLog起步笔记-6-StaticLogInfo
  • 攻防世界 - Web - Level 1 | file_include
  • springboot的restTemplate发起get请求参数到服务端无法被解析,curl或postman可以正常调用的url。
  • 【JavaWeb后端学习笔记】Spring事务管理
  • ISO45001职业健康安全管理体系涵盖了丰富的内容