如图二所示(图像也可以自主选择),(1)把该图像按行像素依次贯序转换为一维波形(灰度为波形的幅度,像素先后为时间序列),分析其频谱;(2)把该图像按列像素依次贯序转换为一维波形(灰度为波形的幅度,像素先后为时间序列),分析其频谱;(3)按奈奎斯特采样定理,讨论其采样频率;(4)按该采样频率进行采样,并通过线性插值滤波进行验证(图像相似度)其正确性。

薛定谔的照片

图像预处理

处理三个通道的数据比较复杂,先将图像进行灰度化处理,灰度化的过程就是将每个像素点的RGB值统一成同一个值。灰度化后的图像将由三通道变为单通道,单通道的数据处理起来就会简单许多。

import matplotlib.pyplot as plt
import numpy as np
import cv2
if __name__ == '__main__':bb=[]aa=[]hang=[]lie=[]img = plt.imread('D:\\11.jpg')
# 显示图片plt.imshow(img)  # 准备显示图片width  = img.shape[1]height = img.shape[0]print('大小:{}'.format(img.shape))plt.show()
# 从彩色图像中去除噪声#dst = cv2.fastNlMeansDenoisingColored(img, 10, 10, 7, 21)
# 灰度化图像img1 = img.mean(axis=-1)  # axis=-1表示最后一个轴,在最后一个轴取均值即灰度化plt.imshow(img1, cmap='gray')plt.axis('on')plt.show()img2 = (np.array(img1))#.round()

图像大小为(431, 592, 3),即宽593,高431,通道大小3,处理后的结果图如下所示:

薛定谔的照片

行/列像素值分析

计算每一行和每一列的像素与幅值关系,用方差找出变化最剧烈的一行/列的索引值,代码如下,经运行可知,行索引为175,列索引为7。

#找出变化最剧烈的某一行或者某一列hang.append(np.std(img2,axis=1))#求出矩阵每一行的方差hang=np.array(hang)print(f"最大方差值:{np.max(hang)},行索引:{hang.argmax()}")lie.append(np.std(img2,axis=0))#求出矩阵每一列的方差lie = np.array(lie)print(f"最大方差值:{np.max(lie)}, 列索引:{lie.argmax()}")for i in range(width):aa.append(i)plt.plot( aa, img2[175], color='red', linewidth=1 )  # 利用得到的行像素值画图plt.show()for j in range(height):bb.append(j)plt.plot( bb, img2[:,7], color='red', linewidth=1 )  # 利用得到的列像素值画图plt.show()

运行结果:

(1)行像素频谱分析

把该图像变化最剧烈的一行像素,以灰度为波形的幅度,像素先后为时间序列的方式转换为一维波形。由波形图可知,此行像素的灰度值变化范围较大,在像素值(0,150)之间灰度值变化明显,来回抖动;在像素(150,350),(400,550)之间灰度值较为平稳,但是像素在(550,592),(350,400)之间灰度值变化剧烈,范围从25到255之间。

薛定谔的照片

(2)列像素频谱分析

把该图像变化最剧烈的一列像素,以灰度为波形的幅度,像素先后为时间序列的方式转换为一维波形。由波形图可知,此列像素的灰度值变化范围较大,在像素(0,150)之间灰度值较为平稳,但是从(150,200)之间变化剧烈,出现了剧烈的抖动,像素值在(200,400)之间变化较为平缓,像素值在(400,431)之间有出现了剧烈的变化。

薛定谔的照片

对图像向下取样,它将对图像进⾏⾼斯核卷积,并删除原图中所有的偶数⾏和列,最终缩⼩图像。其中,⾼斯核卷积运算就是对整幅图像进⾏加权平均的过程,每⼀个像素点的值,都由其本⾝和邻域内的其他像素值经过加权平均后得到。

import cv2
import matplotlib.pyplot as plt
#重新读取原始图像
img = cv2.imread('D:\\4321.jpg')
src = cv2.cvtColor(img, cv2.COLOR_BGR2RGB)
#图像向下取样
r = cv2.pyrDown(src)
#显示图像
titles = ['src', 'pyrDown']
images = [src, r]
plt.figure(figsize=(10, 4))
for i in range(2):plt.subplot(1, 2, i+1)plt.imshow(images[i], 'gray')plt.title(titles[i])
#     plt.xticks([]), plt.yticks([])
plt.show()

3奈奎斯特采样定理

图像采样处理指的是从连续的模拟图像中提取离散像素点的过程。将一幅连续图像在空间上分割成M×N的网格,每个网格用一个亮度值或灰度值来表示,将空间中连续的图像变换成离散点的操作成为采样。若横向的像素数(列数)为M ,纵向的像素数(行数)为N,则图像总像素数为M*N个像素。图像采样就是对原始图像信号的一种数字化逼近。

奈奎斯特采样定律:采样频率fs必须大于原始信号中最高频率的2倍时(fs>2fmax),采样之后的数字信号完整地保留了原始信号中的信息,才能完整地还原原始信号,不发生混叠现象。

以上图中不规则的复杂波形图为例,任何复合狄利克雷条件的周期函数都能够被分解为无穷多个简单的正弦函数。因此可将其转换为多个简单波形的组合,可以理解为上述单行像素的波形图可以被转换为多个基础波形的组合,然后再由离散余弦变换公式计算出各个基础波形的系数,也就是函数在频域的取值。最后找到原始信号中频率最高的信号。

图像采样的间隔越大,所得图像像素数越少,空间分辨率越低,图像质量越差,甚至出现马赛克效应;相反,图像采样的间隔越小,所得图像像素数越多,空间分辨率越高,图像质量越好,但数据量会相应的增大。根据奈奎斯特采样定理,只要采样频率⼤于被采样信号最⾼频率的2倍,就可以由采样信号对原始信号进⾏完整恢复。

在采样的过程中,使用的采样率过低会导致图片丢失大量的细节。其大小和原图一致时将会看到大量如马赛克效果一样的色斑,如下图(采样比率20)。

薛定谔的照片

向下取样使用的函数为pyrDown(),它将原始图像压缩成原图的四分之一。可多次向下取样,每次向下取样均为上次的四分之一,并且图像的清晰度会降低。薛定谔的照片

(4)线性插值

线性插值方法的基本原理是根据导频位置将基系数向量分隔成各个小段,在每个小段内利用导频位置的数据通过一次函数拟合进行插值,从而得到导频位置之间的数值。线性插值可以用来为利用过点的直线来近似原函数,也可以用来计算得到查表过程中表中没有的数值。对于数据(x0, y0)与(x1, y1),要计算[x0, x1]区间内某一位置x在直线上的y值。公式为:

线性插值方法复杂度较低,在算法性能方面的表现一般,由于其低通滤波的特性,插值得到的数值的高频成分被滤除,降低了插值得到的基系数的数值精度。

import cv2
def resize_demo(src, new_size):dst_h, dst_w = new_size  # 目标图像宽高# 遍历目标图像dst = np.zeros((dst_h, dst_w, 3), dtype=np.uint8)for dst_y in range(dst_h):# 对width 循环for dst_x in range(dst_w): # 目标在源上的坐标src_x = dst_xsrc_y = dst_y# 计算在源图上 4 个近邻点的位置i = int(np.floor(src_x))j = int(np.floor(src_y))u = src_x-iv = src_y-jif j == dst_h-1:j = dst_h-2if i == dst_w -1:i = dst_w -2dst[dst_y, dst_x] = (1-u)*(1-v)*src[j, i]+u*(1-v) * \src[j+1, i] + (1-u)*v*src[j, i+1]+u*v*src[j+1, i+1]return dst
if __name__ == '__main__':src = cv2.imread('D:\\4321.jpg')dst = resize_demo(src, (431, 592))cv2.imshow("orignal image", src)cv2.imshow("interpolated image", dst)cv2.waitKey()

线性插值可以扩展到有两个变量的函数的双线性插值,核心思想是在两个方向分别进行一次线性插值,并且选择x方向和y方向进行插值的先后顺序没有唯一标准。如下图所示:左边是原始图像,右边是经过线性插值后的图像。

薛定谔的照片

图片采样的实现过程(题目二)相关推荐

  1. Java课程设计题目二:保存计算过程的计算器

    Java课程设计题目二:保存计算过程的计算器 1 设计要求 参考Windows 操作系统提供的计算器设计一个实用的计算器,要求除了具有普通的计算功能外,还具有保存计算过程的功能. ①单击计算器上的数字 ...

  2. 操作系统期末习题考试习题解答题目二

    操作系统期末习题考试习题解答题目二 目录 操作系统期末习题考试习题解答题目二 第四章 第五章 第六章 第四章 1.什么是分级调度?分时系统中有作业调度的概念吗?如果没有,为什么? P86 答:处理机调 ...

  3. 用Kotlin撸一个图片压缩插件-插件基础篇(二)

    简述: 前两天写了篇用Kotlin撸一个图片压缩插件-导学篇,现在迎来了插件基础篇,没错这篇文章就是教你如何一步一步从零开始写一个插件,包括插件项目构建,运行,调试到最后的上线发布整个流程.如果你是插 ...

  4. 字符型图片验证码识别完整过程及Python实现

    1   摘要 验证码是目前互联网上非常常见也是非常重要的一个事物,充当着很多系统的 防火墙 功能,但是随时OCR技术的发展,验证码暴露出来的安全问题也越来越严峻.本文介绍了一套字符验证码识别的完整流程 ...

  5. 如何完美隐藏Disposable的存储和销毁过程(二)

    如何完美隐藏Disposable的存储和销毁过程(二) 前面一节大致讲了讲,我们的成品到底是怎么样的?那么这一节,我们就来讲讲如何初步地隐藏自己Disposable的存储和销毁. 首先说说最常见的方式 ...

  6. SQL Server 数据库的整理优化的基本过程(二)

    SQL Server 数据库的整理优化的基本过程(二) 高建刚 第一节 基本维护 第二节 索引 索引相信大家都不陌生,而且在因特网上,有了很多关于如何通过索引来优化数据库的文章,在这里,我主要是结合我 ...

  7. (已加马赛克)10 行代码判定色*情*图片——Python 也可以系列之二

    10 行代码判定色*情*图片--Python 也可以系列之二 作者:赖勇浩(http://blog.csdn.net/lanphaday) 致编辑:我已经给图片打上马赛克了,别再删除了啊,我这是纯技术 ...

  8. springboot集成mybatis源码分析-启动加载mybatis过程(二)

    springboot集成mybatis源码分析-启动加载mybatis过程(二) 1.springboot项目最核心的就是自动加载配置,该功能则依赖的是一个注解@SpringBootApplicati ...

  9. 图片人脸检测——OpenCV版(二)

    图片人脸检测 人脸检测使用到的技术是OpenCV,上一节已经介绍了OpenCV的环境安装,点击查看. 功能展示 识别一种图上的所有人的脸,并且标出人脸的位置,画出人眼以及嘴的位置,展示效果图如下: 多 ...

最新文章

  1. 数据库管理系统的组成和结构
  2. wincc历史数据库_什么是数据库?如何学习数据库?
  3. python快速编程入门课本中的名片管理器_python实现名片管理器的示例代码
  4. 更新整理本人全部博文中提供的代码与工具(Java,2014.09)
  5. Extjs.FormPanel
  6. 遍历Linux kernel的链表时删除元素的方法
  7. tomcat.apache startup.bat闪退两种解决方法
  8. 用anaconda配置深度学习的环境,从配置环境到下载各种包,绝对学会,还是没学会留下评论,我看到会回答
  9. mysql innodb内幕_Mysql(技术内幕:InnoDB存储引擎)
  10. Internet Download Manager v6.41 Build 2
  11. 蔡高厅高等数学18-函数在一点处的连续、函数在区间内的连续、两类间断点的判断
  12. c语言程序谭浩强第二章,PDF版本_谭浩强c语言程序设计. 第二章 程序的灵魂-算法...
  13. 学习在layui中input、select、date日历的onchange事件无效解决方法
  14. C#程序设计与应用课程教学总结:自评与改进
  15. linux磁盘列阵和文件系统
  16. 01-bt面板安装redis,并连接测试
  17. 阿里巴巴创始人马云:阿里是幸福指数最高的企业
  18. 不要再使用TCHAR和_T了
  19. 理解伯德图-2/4什么是伯德图
  20. Unity学习——音效系统+音频过滤器+音频混响区+音频管理器

热门文章

  1. 物料搬运单审批工作流流程
  2. win10电脑桌面透明便签_在win10系统的电脑桌面上使用便签贴方法!
  3. SQL注入绕过安全狗
  4. linux下的ant编译,linux 中部署ant编译的包中缺少问题
  5. 【Linux】循序渐进学运维-服务篇-SSH秘钥认证
  6. 密集波分复用(DWDM)技术的优势
  7. C语言之牛客网初级入门编程
  8. 机器视觉框架源码、视觉检测、AOI视觉检测、机械手定位、点胶机、插件机、激光切割机、视觉螺丝机
  9. python编写递归函数、求斐波那契数列_利用Python实现斐波那契数列的方法实例
  10. 前端post请求下载excel表格