zMatrix
zMatrix 是一个使用C++编写的图像处理库,它的基础是_Matrix矩阵模板类。
特色
- 尽可能的提高阅读性
- zMatrix使用类模板来支持各种类型
- 函数接口尽量和
matlab
和opencv
类似,zMatrix类可以和openCV中的Mat类转换 - 使用引用计数来达到自动内存管理的目的,不需要为内存问题担心
USGE
环境变量
(可选:如果使用Kinect, KINECTSDK20_DIR,Kinect的根目录,并在CMakeLists.txt中打开配置)
生成工程
mkdir build
cd build
cmake .. -DCMAKE_INSTALL_PREFIX=D:/zMatrix
已经实现功能
矩阵的基本功能
- 没有实现求秩和求逆
图像处理相关
基础
- 实现jpeg类图片的读取和写入,以及彩色图片的显示。(需要其他功能需要使用openCV的函数)
- 颜色空间转换,BRG->RGB, BGR->GRAY, BGR->HSI, BGR->HSV
线性滤波
- 方框滤波函数
boxFilter()
- 均值滤波函数
blur()
- 高斯滤波函数
GassionBlur()
非线性滤波
- 中值滤波函数
medianBlur()
- 双边滤波函数
bilateralFilter()
形态学滤波
- 腐蚀和膨胀函数
erode()/dilate()
- 开运算、闭运算、顶帽、黑帽、形态学梯度运算,函数
morpEX()
图像变换
sobel()
算子- 简单的canny边缘检测(sobel算子),彩色和灰度均可,效果不好
离散傅里叶变换
dft()
和idft()
- 基2快速离散傅里叶变换
fft()
&ifft()
, 并使用fft()
&ifft()
完成了快速卷积运算,可以对灰度图进行滤波。
仿射变换
translation()
, 平移变换
图像轮廓
- 寻找轮廓:
findContours()
和findOutermostContours()
阈值
- 单通道固定值阈值:
threshold()
图像金字塔
- 对图像上采样函数:
pyrUp()
- 对图形下采样函数:
pyrDown()
Kinect 4 Windows v2 (Events)
- Kinect获取深度、彩色和红外图像,返回Mat类型的数据
BUG日志
- 2016-09-07:将迹的返回类型同一改为double,防止结果溢出
- 2016-09-08:注意不要用Matrix的引用作参数返回值,这个问题需要好好解决
- blur(), 内核大小为(5, 5,runtime(openCV:27ms):4277ms -> 2964ms -> 728ms;
// 受不了openCV的运行效率了,太高了(这是在DEBUG模式下,在Release下要快的多,94ms,opencv 7ms) - medianFilter(), 内核大小为(5, 5),runtime(openCV:334ms):21822ms - > 17594ms
- GassionBlur(), 内核大小为(5, 5),runtime(openCV:116ms):4245ms
- FFT卷积??
- erode()/dilate(), 内核大小为(5, 5),runtime(openCV:10ms):17555ms -> 920ms(release:140ms, 2ms)
- 2016-09-16:修改sobel局部分量的估计没有乘尺度因子
- 2016-09-16:修改zMatrix中conv上次更改后出现数据类型的错误
- 2016-09-17: 修改KinectSensor析构函数中释放指针时未检查是否为空的BUG
- 2016-09-22: 修改_Scalar类定义构造函数和复制函数的错误
- 2016-09-29:字符集引起的血案,将编码格式改为UTF-8(无BOM)后虽然统一了平台,但是发现在别人的电脑上用VS2015编译会报几百的莫名其妙的错误。既然用的是VS,那么还是乖乖的把编码格式改为GB2312吧。
- 2016-10-07: 修改一些BUG. windows和linux上对未初始化的数据的处理方式不一样,需要明确指定初始化方式。
- 2017-02-25:修改获取高斯卷积核的计算函数,之前的公式不对。
- 2017-02-25: 对运算结果进行溢出处理。
# VS插件推荐 `Image Watch`这个插件可以在一个新的窗口显示图片,这里的图片可以是任意矩阵,所以调试起来可以随时直观的看到矩阵类内的数据。 配置文件和效果图在`resources/ImageWatch`.