在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 表,这个表是用来记录数据库中表的 ...
随机推荐
- Spring JDBC样例
这里介绍一下通过Spring JDBC的方式进行数据库的增删改查的操作.在进行程序的编写之前我们需要在本地MySQL数据库中创建一张User表,如下所示: create database user_d ...
- Linux 下8种优秀的屏幕录制机
导读 屏幕录制机已经成为常见的和良好的实践来记录一个重要桌面会话,例如,你想玩一个难度较大的游戏,并且向记录是如何完成的,或者你打算创建一个视频教程,入门文章或指南,或任何其他活动和记录你的桌面会话, ...
- VS2010类模板更改,增加版权等等信息
本文转载自XDOTNET 在开发过程中往往需要在每一个页面(类)增加注释等等内容,VS2010中可以修改模板,在原有模板中增加一个类,会引用System等等命名空间,以及一些程序集.下面我们来看看如何 ...
- c#基础 第二讲
判断一个人的体重是否为标准体重 计算公式:男生:体重(kg)-身高+100=±3(在此范围内为标准体重) 女生:体重(kg)-身高+110=±3 using System; using System. ...
- DPK750针式打印机驱动,750u.dll下载
http://pan.baidu.com/s/1dD1SFvV DPK750针式打印机 下载
- 170323、Spring 事物机制总结
spring两种事物处理机制,一是声明式事物,二是编程式事物 声明式事物 1)Spring的声明式事务管理在底层是建立在AOP的基础之上的.其本质是对方法前后进行拦截,然后在目标方法开始之前创建或者加 ...
- Python--进阶处理2
# ===================第二章:字符串和文本====================== # -----------------使用多个界定符分割字符串--------------- ...
- python--生成测试数据
1.方法 import datetime params_dict_data = { "system_id":"systemId001", "order ...
- tcpdump linux抓http请求头
sudo tcpdump -i eth0 port 80 -s 1024 -l -A
- mapjoin与reducejoin
一.mapjoin 1.Mapper类 package com.css.mapjoin; import java.io.BufferedReader; import java.io.FileInput ...