CV(2)-插值和卷积

前言

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

看看年前可以学到哪。

频率:

灰度值变化程度的指标,是灰度再平面上的梯度幅值:

幅值:

是在一个周期内,交流电瞬时出现的最大绝对值,也是一个正弦波,波峰到波谷的距离的一半。

图像的取样和量化:

  • 取样:就是要用多少点来描述一幅图像,取样结果质量的高低就是用图像的分辨率来衡量的
  • 量化:是指要使用多大范围的数值来表示图像采样之后的一个点。
  • 数字化坐标值称为取样,数字化幅度值称为量化

上采样与下采样:

  • 缩小图像(或称为下采样或降采样)的主要目的:
    • 1、使得图像符合显示区域的大小;
    • 2、生成对应图像的缩略图。
  • 放大图像(或称为上采样或图像插值)的主要目的是放大原图像,从而可以显示在更高分辨率的显示设备上。

插值方法:

  • 最邻近插值:和哪个像素点近就插入其附近,等比例插入像素点的位置

  • 双线性插值(常用):在两个方向上做线性插值(通过4个像素点等比例算出新的像素点位置,几何中心重合!)

  • 双线性差值法的计算比最邻近插值法复杂,计算量较大,但没有灰度不连续的缺点,图像看起来更光滑。

直方图

反映了图像中的灰度分布规律(0-255)。它描述每个灰度级具有的像素个数,但不包含这些像素在图像中的位置信息。

图像直方图不关心像素所处的空间位置,因此不受图像旋转和平移变化的影响,可以作为图像的特征。直方图均衡化就是用一定的算法使直方图大致平和的方法(过亮过暗,套用公式计算新的映射像素点位置)

卷积:

  • 就是特征提取,在CNN是通过大量数据训练得来的,有平滑效果,对位相乘再相加然后移动;
  • 可以通过padding来计算边缘值,防止信息丢失

  • 可以有多个卷积核,提取不同的特征;

  • 卷积核的数量就是输出的通道数,卷积核的通道数就是输入的通道数 (对于输入的每一个通道,都需要有对应的卷积核通道来进行计算,可以参考下图)

卷积-3种填充模式

  1. full:卷积核相交图像开始计算,卷积结果尺寸小于原图像
  2. valid:卷积核边缘与图像边缘对齐,卷积结果尺寸小于原图像
  3. same:卷积结果尺寸等于原图像(常用,步长s=1)

插值和直方图的实现

py 复制代码
"""
1.实现最邻近插值
2,实现双线性插值
3,证明几何中心对称系数
4.实现图像均衡化

"""
import cv2
import matplotlib.pyplot as plt
import numpy as np


# 1.实现最邻近插值
def nearest_interpolation(img, dst_h, dst_w):
    src_h, src_w, _ = img.shape
    t_x = dst_w / src_w
    t_y = dst_h / src_h
    dst_img = np.zeros((dst_h, dst_w, 3), dtype=np.uint8)
    for i in range(dst_h):
        for j in range(dst_w):
            x = int(j / t_x)
            y = int(i / t_y)
            dst_img[i, j] = img[y, x]
    return dst_img


# 2.实现双线性插值
def bilinear_interpolation(img, dst_h, dst_w):
    src_h, src_w, _ = img.shape
    t_x = dst_w / src_w
    t_y = dst_h / src_h
    dst_img = np.zeros((dst_h, dst_w, 3), dtype=np.uint8)
    for i in range(dst_h):
        for j in range(dst_w):
            x = j / t_x
            y = i / t_y
            x1 = int(x)
            y1 = int(y)
            x2 = min(x1 + 1, src_w - 1)  # 防止超过原图的宽 所以有这个min的行为
            y2 = min(y1 + 1, src_h - 1)
            # 公式
            dst_img[i, j] = (1 - (x - x1)) * (1 - (y - y1)) * img[y1, x1] + (1 - (x - x1)) * (y - y1) * img[y2, x1] + (
                        x - x1) * (1 - (y - y1)) * img[y1, x2] + (x - x1) * (y - y1) * img[y2, x2]
    return dst_img


# 3,证明几何中心对称系数为1/2
"""
设中点坐标为a = (x1+x2)/2, b = (y1+y2)/2
对x有 2a = (x1+x2) ,则 x2 = 2a - x1
对y有 2b = (y1+y2) ,则 y2 = 2b - y1
所以对称点坐标为 (2a - x1, 2b - y1)
因为中点,有 x2-x1 = 2(a-x1) ,得出x2和x1的差值是x1到a距离的两倍,并且方向是相反的
又因为是关于O中心对称,在x坐标系中,坐标系的变化系数就是1/2,
同理在y坐标系中,坐标系的变化系数也是1/2。

"""


# 4.实现图像均衡化
def equalization(img):
    # 灰度化
    # grey_img = cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)
    # 多个通道每个通道都需要均衡化 然后合并
    b, g, r = cv2.split(img)
    eqb_img = cv2.equalizeHist(b)
    eqg_img = cv2.equalizeHist(g)
    eqr_img = cv2.equalizeHist(r)
    eqz_img = cv2.merge((eqb_img, eqg_img, eqr_img))
    return eqz_img


if __name__ == '__main__':
    img = cv2.imread("test.png")
    """
    1.实现最邻近插值
    near_img = nearest_interpolation(img,300, 300)
    cv2.imshow("near_img",near_img)
    cv2.waitKey(0)
    """
    """
    2.实现双线性插值
    near_img = bilinear_interpolation(img, 300, 300)
    cv2.imshow("bili_img", near_img)
    cv2.waitKey(0)
    """
    # 4.实现图像均衡化
    dst_img = equalization(img)
    cv2.imshow("dst_img", dst_img)
    cv2.waitKey(0)
相关推荐
春哥的研究所21 分钟前
AI人工智能名片小程序源码系统,名片小程序+分销商城+AI客服,包含完整搭建教程
人工智能·微信小程序·小程序
ahead~25 分钟前
【大模型入门】访问GPT_API实战案例
人工智能·python·gpt·大语言模型llm
喜欢吃豆25 分钟前
深入企业内部的MCP知识(三):FastMCP工具转换(Tool Transformation)全解析:从适配到增强的工具进化指南
java·前端·人工智能·大模型·github·mcp
pany32 分钟前
写代码的节奏,正在被 AI 改写
前端·人工智能·aigc
我爱一条柴ya1 小时前
【AI大模型】神经网络反向传播:核心原理与完整实现
人工智能·深度学习·神经网络·ai·ai编程
万米商云1 小时前
企业物资集采平台解决方案:跨地域、多仓库、百部门——大型企业如何用一套系统管好百万级物资?
大数据·运维·人工智能
新加坡内哥谈技术1 小时前
Google AI 刚刚开源 MCP 数据库工具箱,让 AI 代理安全高效地查询数据库
人工智能
慕婉03071 小时前
深度学习概述
人工智能·深度学习
大模型真好玩1 小时前
准确率飙升!GraphRAG如何利用知识图谱提升RAG答案质量(额外篇)——大规模文本数据下GraphRAG实战
人工智能·python·mcp
19891 小时前
【零基础学AI】第30讲:生成对抗网络(GAN)实战 - 手写数字生成
人工智能·python·深度学习·神经网络·机器学习·生成对抗网络·近邻算法