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)
相关推荐
寻道码路几秒前
探秘 Docling:多格式文档解析转换大揭秘,赋能 AI 应用新生态
人工智能·aigc·ai编程
健忘的派大星1 分钟前
【AI大模型】根据官方案例使用milvus向量数据库打造问答RAG系统
人工智能·ai·语言模型·llm·milvus·agi·rag
黑客-雨2 分钟前
从零开始:如何用Python训练一个AI模型(超详细教程)非常详细收藏我这一篇就够了!
开发语言·人工智能·python·大模型·ai产品经理·大模型学习·大模型入门
是Dream呀2 分钟前
引领AI发展潮流:打造大模型时代的安全与可信——CCF-CV企业交流会走进合合信息会议回顾
人工智能·安全·生成式ai
日出等日落4 分钟前
小白也能轻松上手的GPT-SoVITS AI语音克隆神器一键部署教程
人工智能·gpt
孤独且没人爱的纸鹤16 分钟前
【机器学习】深入无监督学习分裂型层次聚类的原理、算法结构与数学基础全方位解读,深度揭示其如何在数据空间中构建层次化聚类结构
人工智能·python·深度学习·机器学习·支持向量机·ai·聚类
后端研发Marion18 分钟前
【AI编辑器】字节跳动推出AI IDE——Trae,专为中文开发者深度定制
人工智能·ai编程·ai程序员·trae·ai编辑器
Tiger Z41 分钟前
R 语言科研绘图 --- 散点图-汇总
人工智能·程序人生·r语言·贴图
小深ai硬件分享2 小时前
Keras、TensorFlow、PyTorch框架对比及服务器配置揭秘
服务器·人工智能·深度学习
hunter2062063 小时前
用opencv生成视频流,然后用rtsp进行拉流显示
人工智能·python·opencv