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的实现

py 复制代码
"""
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)
相关推荐
跳跳糖炒酸奶17 分钟前
第四章、Isaacsim在GUI中构建机器人(3):添加摄像头和传感器
人工智能·python·算法·ubuntu·机器人
求知呀2 小时前
最直观的 Cursor 使用教程
前端·人工智能·llm
飞哥数智坊2 小时前
从“工具人”到“超级个体”:程序员如何在AI协同下实现能力跃迁
人工智能
chenqi2 小时前
WebGPU和WebLLM:在浏览器中解锁端侧大模型的未来
前端·人工智能
罗西的思考3 小时前
[2W字长文] 探秘Transformer系列之(23)--- 长度外推
人工智能·算法
小杨4044 小时前
python入门系列十四(多进程)
人工智能·python·pycharm
阿坡RPA19 小时前
手搓MCP客户端&服务端:从零到实战极速了解MCP是什么?
人工智能·aigc
用户277844910499319 小时前
借助DeepSeek智能生成测试用例:从提示词到Excel表格的全流程实践
人工智能·python
机器之心19 小时前
刚刚,DeepSeek公布推理时Scaling新论文,R2要来了?
人工智能
算AI21 小时前
人工智能+牙科:临床应用中的几个问题
人工智能·算法