【计算机视觉 】数字图像

本文介绍了数字图像的基本概念,包括像素、分辨率、灰度和通道。详细讨论了RGB到灰度的转换,并探讨了图像的取样和量化,包括上采样、下采样和插值方法。接着,文章深入到直方图的概念,展示了如何进行图像的灰度直方图均衡化。最后,讨论了滤波和卷积的基础知识,如滤波器规则、卷积核及其应用,如边缘检测和图像锐化。
摘要由CSDN通过智能技术生成

1. 图像

1.1 基本概念

  • 像素:像素是分辨率的单位。像素是构成位图图像最基本的单元,每个像素都有自己的颜色。

  • 分辨率(解析度)

    ① 图像分辨率就是单位英寸内的像素点数。单位为PPI(Pixels Per Inch)

    ② PPI表示的是每英寸对角线上所拥有的的像素数目:

    ③ 屏幕尺寸指的是对角线长度

    ④ 在生活中被混用,或者说错误的用做衡量图像内的像素点数量。

  • 灰度:表示图像像素明暗程度的数值,也就是黑白图像中点的颜色深度。范围一般为0-255。白色为255,黑色为0。

  • 通道:把图像分解成一个或多个颜色成分:

    ①单通道:一个像素点只需一个数值表示,只能表示灰度,0为黑色; (二值图&灰度图)

    ②三通道:RGB模式,把图像分为红绿蓝三个通道,可以表示彩色,全0表示黑色;

    ③四通道:RGBA模式,在RGB基础上加上alpha通道,表示透明度,alpha=0表示全透明

  • 频率: 灰度值变化剧烈程度的指标,是灰度在平面空间上的梯度。高频、低频

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

  • 颜色模型———RGB模型
    RGB颜色模型是三维直角坐标颜色系统中的一个单位正方体
    在正方体的主对角线上,各原色的量相等,产生由暗到亮的白色,即灰度。
    正方体的其他6个角点分别为红、黄、绿、青、蓝和品红
    在这里插入图片描述

1.2 RGB转Gray

  • **转换原因:**浮点运算更精准,整数运算会因为丢小数部分导致颜色值严重失真,计算过程越多越失真。

  • 根据通道转换方法:

    • 浮点算法:Gray=R0.3+G0.59+B0.11
    • 整数方法:Gray=(R30+G0.59+B11)/100
    • 移位方法:Gray=(R76+G151+B*28)>>8
    • 平均值法:Gray=(R+G+B)/3
    • 仅取绿色:Gray=G
  • RGB转换为浮点数(RGB转化为[0,1]之间的小数)

    二值化:(用坐标分别除以最大值255就可以得到0到1之间的数)

    # 二值化
    # 笨方法
    if(img_gray[i,j]<=0.5):
    	img_gray[i,j]=0
    else:
    	img_gray[i,j]=1
    # 使用函数
    img_binary = np.where(img_gray >= 0.5, 1, 0)
    
  • **注意:**再使用openCV时,openCV对于读进来的图片的痛到排列是BGR,不是RGB

    BGR转为RGB的方法:

    img = cv2.imread('1.jpg')# 读取图像为BGR顺序
    img = cv2.cvtColor(img,cv2.COLOR_BGR2RGB)# 将图像转为RGB顺序
    

    cv2.cvtColor():颜色空间转换函数

    函数构成:

    cv2.cvtColor(frame,cv2.COLOR_BGR2RGB)

    参数说明:

    @frame为要进行处理的图片;

    @cv2.COLOR_BGR2RGB要进行的色彩转换方式;

    在这里插入图片描述

    灰度化

      img_gray = rgb2gray(img)
      # img_gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
      # img_gray = img
    

1.3【 代码实现】彩色图像的灰度化、二值化

# -*- coding: utf-8 -*-
"""
@author: Michael

彩色图像的灰度化、二值化
"""
from skimage.color import rgb2gray
import numpy as np
import matplotlib.pyplot as plt
import cv2

# RGB转Gray
img = cv2.imread("1.1.png")
h, w = img.shape[:2]  # 获取图片的high和wide
img_gray = np.zeros([h, w], img.dtype)  # 创建一张和当前图片大小一样的单通道图片
for i in range(h):
    for j in range(w):
        m = img[i, j]  # 取出当前high和wide中的BGR坐标
        img_gray[i, j] = int(m[0] * 0.11 + m[1] * 0.59 + m[2] * 0.3)  # 将BGR坐标转化为gray坐标并赋值给新图像,这里直接套用公式
print(img_gray)
print("image show gray: %s" % img_gray)
cv2.imshow("image show gray", img_gray)

plt.subplot(221)  # 显示多图像,为2*2的从左到右从上到下的显示,此图像在第一个位置
img = plt.imread("1.1.png")
# img = cv2.imread("lenna.png", False)
plt.imshow(img)
print("---image lenna----")
print(img)

# 灰度化
img_gray = rgb2gray(img)
# img_gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
# img_gray = img
plt.subplot(222)  # 显示多图像的第二个位置
plt.imshow(img_gray, cmap='gray')
print("---image gray----")
print(img_gray)

# 二值化
# rows, cols = img_gray.shape
# for i in range(rows):
#     for j in range(cols):
#         if (img_gray[i, j] <= 0.5):
#             img_gray[i, j] = 0
#         else:
#             img_gray[i, j] = 1

img_binary = np.where(img_gray >= 0.5, 1, 0)
print("-----imge_binary------")
print(img_binary)
print(img_binary.shape)

plt.subplot(223)  # 显示多图像的第三个位置
plt.imshow(img_binary, cmap='gray')
plt.show()

在这里插入图片描述

2. 图像的取样和量化

2.1 基本概念

  • 数字图像:计算机保存的图像都是一个一个的像素点,称为数字图像。

  • 图像数字化过程由图像的取样与量化来完成。

  • 取样:就是要用多少点来描述一幅图像,取样结果质量的高低就是用图像的分辨率来衡量的

  • 量化:是指要使用多大范围的数值来表示图像采样之后的一个点。(也就是图像颜色的取值范围)

  • 数字化坐标值称为取样,数字化幅度值称为量化

  • 在取样时,若横向的像素数(列数)为M ,纵向的像素数(行数)为N,则图像总像素数为

    M*N个像素。
    在这里插入图片描述

2.1

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

吃_早餐

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值