目录

  • 数字图像
    • 像素和分辨率
    • 灰度、通道和对比度
    • 其他概念
  • 插值算法
    • 上采样和下采样的概念
      • 1. 最邻近插值
      • 2.双线性插值(最常用)
      • 3.双三次插值
  • 直方图均衡化
    • 1. 灰度图直方图均衡化
    • 2. 彩色图直方图均衡化

数字图像

像素和分辨率

像素
像素是分辨率的单位。像素是构成位图图像最基本的单元。

分辨率
图像分辨率 就是 单位英寸内的像素点数(PPI)
屏幕尺寸 指的是 对角线的长度
像素点数量:1920*1080
分辨率是指:PPI
两者不可混淆

灰度、通道和对比度

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

通道

对比度
指不同颜色之间的差别。 对比度=最大灰度值/最小灰度值

三原色

计算机中,数字计算机是光学三原色(RGB),美术上用的是色彩三原色(CMYK)

RGB转化为Gray

cv2中封装的函数: cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)
很多图像识别将RGB图像灰度化。

RGB值(初始为[0,255]之间的整数值)转化为浮点数:

其他概念

频率:灰度值变化剧烈程度的指标
幅值:一个周期内交流电出现的瞬时最大值
数字图像: 计算机保存的图像都是一个一个的像素点,称为数字图像
取值: 要用多少点来描述一幅图像
量化:要使用多大范围的数值来表示图像采样之后的一个点

插值算法

上采样和下采样的概念

上采样:主要功能是放大原图像,可以显示在更高分辨率的显示设备上
原理:内插值

下采样:主要目的是:生成对应图像的缩略图
原理:插值 or (M/s)*(N/s)

1. 最邻近插值

cv2.resize函数的实现原理是图像插值,也称为图像重采样。它的目的是在图像的缩放、旋转、平移等变换中,将像素从原始位置移动到新位置,并生成新的像素值。在cv2.resize函数中,可以使用不同的插值方法,如最邻近插值、双线性插值、双三次插值等。其中,最邻近插值是一种简单的插值方法

它的原理如下:

首先确定目标图像上的一个像素位置,假设这个位置为(x, y);
计算出原始图像上的对应位置,假设为(x’, y’);
最邻近插值方法将原始图像上离(x’, y’)最近的像素的值赋给目标图像上的(x, y)位置。
也就是说,最邻近插值方法并不考虑离目标位置较远的像素,而是选择距离最近的像素来进行插值,因此它的计算速度非常快。但是,由于它没有考虑周围像素的权重,因此可能会产生锯齿状的边缘或明显的马赛克效应,特别是在图像缩放比例较大时。
除了最邻近插值方法之外,cv2.resize函数还支持双线性插值和双三次插值等更高级的插值方法。在实际应用中,我们需要根据具体的应用场景来选择合适的插值方法。

代码:

import cv2def nearest_upsampling(img, scale):"""实现RGB图像最邻近插值的上采样功能:param img: 原始图像,必须为RGB图像:param scale: 上采样比例:return: 上采样后的图像"""# 获取原始图像的宽和高height, width, channels = img.shape# 计算上采样后的宽和高new_width = int(width * scale)new_height = int(height * scale)# 使用cv2.resize实现最邻近插值的上采样img_upsampled = cv2.resize(img, (new_width, new_height), interpolation=cv2.INTER_NEAREST)return img_upsampled

使用方式:

# 读取图像
img = cv2.imread('test.jpg', cv2.IMREAD_COLOR)# 进行最邻近插值的上采样,比例为2
img_upsampled = nearest_upsampling(img, 2)# 显示原始图像和上采样后的图像
cv2.imshow('Original Image', img)
cv2.imshow('Upsampled Image', img_upsampled)
cv2.waitKey(0)
cv2.destroyAllWindows()

2.双线性插值(最常用)

双线性插值是一种图像插值方法,它可以用于图像的缩放、旋转、平移等变换中。通俗来讲,就是在缩放或旋转图像时,使用周围4个像素的颜色信息来计算新像素的颜色值,以达到图像的平滑处理。双线性插值的原理就是先在水平方向上进行一次线性插值,然后在垂直方向上进行一次线性插值,将这两次插值的结果进行加权平均,得到最终的插值结果。这种方法比最邻近插值更平滑,而比双三次插值计算速度更快,因此在许多图像处理的应用场景中被广泛使用

代码:

import cv2def bilinear_interpolation(img, scale):"""实现双线性插值的上采样功能:param img: 原始图像:param scale: 上采样比例:return: 上采样后的图像"""# 获取原始图像的宽和高height, width = img.shape[:2]# 计算上采样后的宽和高new_width = int(width * scale)new_height = int(height * scale)# 使用cv2.resize实现双线性插值的上采样img_upsampled = cv2.resize(img, (new_width, new_height), interpolation=cv2.INTER_LINEAR)return img_upsampled

使用方法

# 读取图像
# cv2.IMREAD_COLOR是cv2.imread函数的一个参数,它的作用是告诉OpenCV以彩色图像的方式读取图像。
img = cv2.imread('test.jpg', cv2.IMREAD_COLOR)# 进行双线性插值的上采样,比例为2
img_upsampled = bilinear_interpolation(img, 2)# 显示原始图像和上采样后的图像
cv2.imshow('Original Image', img)
cv2.imshow('Upsampled Image', img_upsampled)
cv2.waitKey(0)
cv2.destroyAllWindows()

3.双三次插值

双三次插值是一种高级的图像插值方法,它可以用于图像的缩放、旋转、平移等变换中。与双线性插值相比,双三次插值可以更加准确地保留原始图像的细节信息,从而在图像处理的应用场景中得到广泛应用。

双三次插值的原理

双三次插值的原理是在水平方向和垂直方向都进行三次插值,使用周围16个像素的颜色信息来计算新像素的颜色值。在三次插值的过程中,首先计算出相邻的四个像素的插值函数,然后再将这四个插值函数组合成一个整体的插值函数。这个整体插值函数的求解需要用到矩阵运算,因此计算复杂度较高,但是它可以在保持图像平滑的同时,尽可能地保留原始图像的细节信息。

代码实现:

import cv2def upscale_image_bicubic(img, scale_factor):"""使用双三次插值提高图像分辨率:param img: 原始图像:param scale_factor: 提高分辨率的倍数:return: 分辨率提高后的图像"""# 获取原始图像的宽和高height, width = img.shape[:2]# 计算分辨率提高后的宽和高new_width = int(width * scale_factor)new_height = int(height * scale_factor)# 使用cv2.resize函数进行分辨率提高,采用双三次插值方式upscaled_img = cv2.resize(img, (new_width, new_height), interpolation=cv2.INTER_CUBIC)return upscaled_img

使用方法如以上其他函数相同

直方图均衡化

图像的灰度直方图就是描述了图像灰度分布规律,它描述每个灰度级具有的像素个数
图像的灰度直方图不关系像素所处的空间位置,因此不受图像旋转和平移变化 的影响,可以作为图像的特征。

代码实现:

import cv2
import matplotlib.pyplot as pltdef plot_gray_histogram(img):"""绘制灰度图像直方图:param img: 灰度图像:return: None"""# 计算灰度图像的直方图hist = cv2.calcHist([img], [0], None, [256], [0, 256])# 绘制直方图plt.plot(hist)# 设置x轴和y轴的标签和标题plt.xlim([0, 256])plt.xlabel('灰度值')plt.ylabel('像素数量')plt.title('灰度图像直方图')# 显示直方图plt.show()import cv2# 读取灰度图像   cv2.IMREAD_GRAYSCALE以灰度图读取
img = cv2.imread('tem.jpg', cv2.IMREAD_GRAYSCALE)# 绘制灰度图像直方图
plot_gray_histogram(img)

直方图均衡化是将原图像的直方图通过变换函数变为均匀分布的直方图,然后按照均匀直方图修改原图像,从而获得一幅会的分布均匀的新图像,直方图均衡化就是用一定的算法使直方图大致平和的方法
其主要功能是 图像增强

1. 灰度图直方图均衡化

import cv2def equalize_gray_hist(img):"""灰度图直方图均衡化:param img: 灰度图像:return: 均衡化后的灰度图像"""# 进行直方图均衡化equalized_img = cv2.equalizeHist(img)return equalized_img

2. 彩色图直方图均衡化

YUV格式:

在彩色图直方图均衡化中,我们只对Y通道进行直方图均衡化,而U和V通道保持不变。这是因为在YUV颜色空间中,Y通道代表亮度,而U和V通道代表色度,均衡化亮度通道能够增强图像对比度而不改变色度信息。

import cv2
import numpy as npdef equalize_color_hist(img):"""彩色图直方图均衡化:param img: 彩色图像:return: 均衡化后的彩色图像"""# 将图像转换为YUV格式yuv_img = cv2.cvtColor(img, cv2.COLOR_BGR2YUV)# 对Y通道(亮度)进行直方图均衡化yuv_img[:,:,0] = cv2.equalizeHist(yuv_img[:,:,0])# 将图像转换回BGR格式equalized_img = cv2.cvtColor(yuv_img, cv2.COLOR_YUV2BGR)return equalized_img

计算机视觉 | 八斗人工智能 (上)相关推荐

  1. 计算机视觉 | 八斗人工智能 (中)

    目录 卷积&滤波 1.一个没有任何效果的卷积核 2.平均均值滤波 3.图像锐化 4.soble边缘检测 卷积的三种填充模式 1.padding --> same模式 最常用的模式 2.f ...

  2. 八斗金宝库分享能赚取零花钱的几个副业项目

    今天给大家带来一款完全无脑的赚钱项目,赚大钱做不到,挣点零花还是没有问题的哦 百度掘金做任务 网上有很多任务平台,这种平台会发布各种各样的任务,我们只要按要求完成任务,然后就能领钱了. 如果你自己有技 ...

  3. 一路狂奔的今日头条,在人工智能上还有三个隐忧

    文 | 颜璇 来源 | 智能相对论(aixdlun) 今日头条仍在继续整改. 4月11日,张一鸣一夜未眠,于凌晨发公开信向公众道歉,紧接着,头条内部宣布整改,APP里语录.美女.趣图.段子.美图5个频 ...

  4. 国内Android游戏推荐,2月中国安卓游戏收入榜Top20:腾讯八款游戏上榜

    [摘要]在Top20榜单中,腾讯共有八款游戏上榜,分别为<欢乐斗地主>.<天天跑酷>.<天天炫斗>.<全民反恐>.<全民飞机大战>.< ...

  5. 计算机视觉在小机器人中应用,计算机视觉系统在工业机器人上的应用研究.doc...

    计算机视觉系统在工业机器人上的应用研究.doc 计算机视觉系统在工业机器人上的应用研究 摘要:目前,工业机器人广泛适用于工业生产中,在工作人员的指引操作下,可以完成许多的指令,但是机器人没有感知外界的 ...

  6. 2018-2019-1 20165318《信息安全系统设计基础》第八周课上测试

    2018-2019-1 20165318<信息安全系统设计基础>第八周课上测试 测试-1-ch03 任务详情 通过输入gcc -S -o main.s main.c,将下面c程序" ...

  7. java 跨平台很鸡肋,Mac 篇八:Mac上的这个软件看起来很鸡肋,其实很牛很强大

    Mac 篇八:Mac上的这个软件看起来很鸡肋,其实很牛很强大 2019-11-26 11:37:36 8点赞 42收藏 1评论 用了很多年Mac,可能这个应用都没有注意到,看起来不起眼,其实用好它,不 ...

  8. PHP编程第八期线上培训班课程

    教程介绍 PHP编程第八期线上培训班课程涵盖PHP及其周边主要技术,web网站建设,微信小程序开发等可以轻松应对!汇总出最实用的PHP技术,学完之后,可以快速融入企业开发环境中.适合没有Web开发基础 ...

  9. 人工智能学习(八斗学院)

    需要资料请私聊:Q:1421724567,V:15874363534(请备注来意) [资料齐全] 老师讲的非常清楚仔细 加油,挑战一下自己!!! 需要资料请私聊:Q:1421724567,V:1587 ...

最新文章

  1. 【C++】stack的部分使用(之后会不定时进行更新)
  2. Python之Pandas库学习(一):简介
  3. cesium 设置时间_Cesium应用篇:3控件(1)Clock
  4. 使用localStorage解决浏览器刷新后无法再从vuex中获取数据的问题
  5. P1527 [国家集训队]矩阵乘法
  6. 匿名内部类 可以访问外部类_Java——内部类详解
  7. 巴菲特2021年致股东信披露重仓股名单
  8. sql 复合键_SQL复合键
  9. 关于数据库“事务”“索引”“实例”的含义
  10. 全球抵押销售点(POS)软件行业调研及趋势分析报告
  11. 单片机项目开发设计 - 器件选型原则根据、常用单片机资源配置要点(GPIO、SPI、IIC、ADC)
  12. PyCharm的安装和破解
  13. hdfs写流程和MR缓冲区
  14. 使用cookie实现一周内自动登录
  15. HDMI转MIPI CSI东芝转换芯片-TC358743XBG/TC358749XBG
  16. 学生信息管理系统python
  17. [今日名人回顾]计算机之父—冯·诺依曼
  18. 在微信朋友圈常见的H5要如何制作?
  19. 激光雷达公司一径科技完成C轮融资,将加快核心芯片自研
  20. 变速器档位速比的matlab仿真

热门文章

  1. 关于C语言中的宏的一点点讨论
  2. Python动物图像分割API简单调用实例演示,阿里达摩院视觉智能开放平台使用步骤
  3. Cubase中MIDI设备的如何添加面板
  4. Python之OpenGL笔记(17):键盘鼠标控制摄像机移动旋转
  5. 什么是数据中心SOP、MOP、EOP?
  6. GTS、GCK,GSR全称
  7. matlab的稀疏表示分类,基于稀疏表示的分类方法
  8. 给女朋友明天一条贴心消息【公众号推送】
  9. 学会这些,睡觉也能赚大钱
  10. 原创 全城公交标注系统 (2)