在python3下对数据分块(8x8大小)使用OpenCV的离散余弦变换DCT
在MATLAB中有blkproc (blockproc)对数据处理, 在python下没找到对应的Function,
这里利用numpy 的split(hsplit和vsplit) 对数据分块处理成8x8的小块, 然后在利用OpenCV的dct函数做变换, 同时利用idct 验证数据变换是否正确.
import numpy as np
import cv2
a = np.arange(256).reshape((16,16))
print("ori data: \n{}".format(a))
m,n = a.shape
print(m,n)
# Y = np.zeros(256).reshape((16,16))
hdata = np.vsplit(a,n/8) # 垂直分成高度度为8 的块
for i in range(0, n//8):
blockdata = np.hsplit(hdata[i],m/8)
#垂直分成高度为8的块后,在水平切成长度是8的块, 也就是8x8 的块
for j in range(0, m//8):
block = blockdata[j]
print("block[{},{}] data \n{}".format(i,j,blockdata[j]))
Yb = cv2.dct(block.astype(np.float))
print("dct data\n{}".format(Yb))
iblock = cv2.idct(Yb)
print("idct data\n{}".format(iblock))
以下是最后个8x8块的数据:
block[1,1] data
[[136 137 138 139 140 141 142 143]
[152 153 154 155 156 157 158 159]
[168 169 170 171 172 173 174 175]
[184 185 186 187 188 189 190 191]
[200 201 202 203 204 205 206 207]
[216 217 218 219 220 221 222 223]
[232 233 234 235 236 237 238 239]
[248 249 250 251 252 253 254 255]]
dct data
[[ 1.56400000e+03 -1.82216412e+01 0.00000000e+00 -1.90481783e+00
0.00000000e+00 -5.68239222e-01 0.00000000e+00 -1.43407825e-01]
[-2.91546259e+02 0.00000000e+00 0.00000000e+00 0.00000000e+00
0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00]
[ 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00
0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00]
[-3.04770852e+01 0.00000000e+00 0.00000000e+00 0.00000000e+00
0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00]
[ 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00
0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00]
[-9.09182756e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00
0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00]
[ 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00
0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00]
[-2.29452520e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00
0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00]]
idct data
[[136. 137. 138. 139. 140. 141. 142. 143.]
[152. 153. 154. 155. 156. 157. 158. 159.]
[168. 169. 170. 171. 172. 173. 174. 175.]
[184. 185. 186. 187. 188. 189. 190. 191.]
[200. 201. 202. 203. 204. 205. 206. 207.]
[216. 217. 218. 219. 220. 221. 222. 223.]
[232. 233. 234. 235. 236. 237. 238. 239.]
[248. 249. 250. 251. 252. 253. 254. 255.]]
数据与原数据值大小一致.
在python3下对数据分块(8x8大小)使用OpenCV的离散余弦变换DCT的更多相关文章
- 在python3下使用OpenCV做离散余弦变换DCT及其反变换IDCT
对图像处理经常用到DCT, Python下有很多带有DCT算法包, 这里使用OpenCV的DCT做变换, 并简单置0部分数据, 再查看反变换图像的效果. import numpy as np impo ...
- 一个Python中优雅的数据分块方法
背景 看到这个标题你可能想一个分块能有什么难度?还值得细说吗,最近确实遇到一个有意思的分块函数,写法比较巧妙优雅,所以写一个分享. 日前在做需求过程中有一个对大量数据分块处理的场景,具体来说就是几十万 ...
- TCP 和 UDP 协议发送数据包的大小 (转载)
MTU最大传输单元,这个最大传输单元实际上和链路层协议有着密切的关系,EthernetII帧的结构DMAC+SMAC+Type+Data+CRC由于以太网传输电气方面的限制,每个以太网帧都有最小的大小 ...
- Alwasyon环境下增加数据文件需要注意的几点
半夜收到报警短信,服务器磁盘空间不足,爬起来检查一番,发现由于索引重建导致,而且该磁盘下仍有自动增长的数据文件,由于该服务器上其他盘符有剩余空间,于是打算将该磁盘下的数据文件限制增长,并新增几个数据文 ...
- CentOS系统下的数据盘挂载
此教程适用系统:Linux(CentOS,Debian,Ubuntu,Fedora) 通常新开通的Linux云服务器数据盘都未做分区和格式化.在进行数据盘挂载之前我们要先进行分区以及格式化操作.注意, ...
- Python3:pyecharts数据可视化插件
Python3:pyecharts数据可视化插件 一.简介 pyecharts 是一个用于生成 Echarts 图表的类库. Echarts 是百度开源的一个数据可视化 JS 库.主要用于数据可视化. ...
- python3下安装aiohttp遇到过的那些坑
python3下安装aiohttp遇到过的那些坑 最近需要用到aiohttp这个库,在安装过程中遇到很多坑.google.baidu后,依然没有找到合适的解决方案. 后来通过去python官方的PyP ...
- TCP和UDP 协议发送数据包的大小
在进行UDP编程的时候,我们最容易想到的问题就是,一次发送多少bytes好? 当然,这个没有唯一答案,相对于不同的系统,不同的要求,其得到的答案是不一样的,这里仅对像ICQ一类的发送聊天消息的情况作分 ...
- Mysql 查看表数据以及索引大小
如果想查看 Mysql 数据库的总的数据量或者某个表的数据或者索引大小,可以使用系统库 information_schema 来查询,这个系统库中有一个 TABLES 表,这个表是用来记录数据库中表的 ...
随机推荐
- 《jquery权威指南2》学习笔记------基础函数
Math.floor(Math.random() * 7 + 1); Math.random() 生成0和1之间的随机小数Math.random() * 7 生成0和7之间的随机小数Math.rand ...
- 在VS2013下如何配置DirectX SDK的开发环境_百度经验
jpg改rar
- Maven结构下 properties 读取
Properties properties = new Properties();InputStream in = ClassLoader.class.getResourceAsStream(&quo ...
- PAT 甲级 1026 Table Tennis(模拟)
1026. Table Tennis (30) 时间限制 400 ms 内存限制 65536 kB 代码长度限制 16000 B 判题程序 Standard 作者 CHEN, Yue A table ...
- Eclipse+ADT+Android SDK 搭建安卓开发环境(版权属于forever-z)
运行环境 windows 7或者10(64位); 为例eclipse-jee-neon-3-win32-x86_64: ADT-23.0.4 下载地址 安装JDK 这里可以参考关于安装JDK的教程,请 ...
- lsof,fuser,xargs,print0,cut,paste,cat,tac,rev,exec,{},双引号,单引号,‘(字符串中执行命令)
cut用来从文本文件或标准输出中抽取数据列或者域,然后再用paste可以将这些数据粘贴起来形成相关文件. 粘贴两个不同来源的数据时,首先需将其分类,并确保两个文件行数相同.paste将按行将不同文件行 ...
- 网络模型一般是指 OSI 七层参考模型和 TCP/IP 五层参考模型。
网络模型一般是指 OSI 七层参考模型和 TCP/IP 五层参考模型. 每一层实现各自的功能和协议,并且都为上一层提供业务功能.为了提供这 种业务功能,下一层将上一层中的数据并入到本层的数据域中,然后 ...
- 关于HashSet在 java7 与 java8的不同
作者:RednaxelaFX链接:https://www.zhihu.com/question/28414001/answer/40733996来源:知乎著作权归作者所有.商业转载请联系作者获得授权, ...
- POJ1470Closest Common Ancestors 最近公共祖先LCA 的 离线算法 Tarjan
该算法的详细解释请戳: http://www.cnblogs.com/Findxiaoxun/p/3428516.html #include<cstdio> #include<alg ...
- Win32 配置文件用法
#include "stdafx.h"#include <Shlobj.h>#include <Shlwapi.h> #pragma comment(lib ...