2015年5月11日星期一
使用Emgu CV不要忘记加入OpenCV Libs
有时候在VS2012中运行编译后的程序有可能会出现上图所示这个问题,可能的原因 1. 没有OpenCV Libs,如果编译成x86,我们就需要把x86的目录放入Debug和Build生成exe的文件夹里面,可以x86这个文件夹从C:\Emgu\bin里面找到。2 也有可能设置Debug和Build的路径问题,只需要确认是否正确设置就可以了。
2014年9月8日星期一
OpenCV放大或者缩小图像的速度
cv::resize(InputArray src, OutputArray dst, Size dsize, double fx=0, double fy=0, int interpolation=INTER_LINEAR )¶
http://docs.opencv.org/modules/imgproc/doc/geometric_transformations.html
关于它的Interpolation method(插值方法),其中:
INTER_NEAREST 最近邻插值,是最快的method并且创建blocky images并选择1个pixel去替代几个pixels,这样做得到图像的结果效果比较差。
INTER_AREA 也是一个快速计算方法,它取几个pixels的平均值,所以它比较适合缩小图像,而不是放大图像。
INTER_LINEAR 使用双线性的插值去改变图像尺寸,组成几个pixels在一起(在很多情况下是比较好的选择,但是计算速度比较慢)。
INTER_CUBIC 使用的是双三次的插值,但是计算机量比较大,所以运行速度慢,而且有时候结果看起来比较好,有时候比较差。
非常简单地,不完全正确地说,在速度上:
INTER_NEAREST > INTER_AREA > INTER_LINEAR > INTER_CUBIC
但是放大或者缩小图像后的效果上一般而言INTER_LINEAR是相对最好的。
其实,也可以使用Opencv的cv::pyrUp(使用Gaussian 金字塔分解对输入图像向上采样)和cv::pyrDown(使用 Gaussian金字塔分解对输入图像向下采样),关于使用这两个function去放大或者缩小图像,具体信息可查阅下面链接:
http://docs.opencv.org/doc/tutorials/imgproc/pyramids/pyramids.html
但是cv::pyrUp和cv::pyrDown的运算速度其实也并不高。
2014年9月7日星期日
libVLC进行memory stream延迟问题
http://stackoverflow.com/questions/19604815/main-input-error-and-delays-when-libvlc-stream-images-in-memory
为了找到错误我打开以下的参数:
"--verbose=2", // Be much more verbose then normal for debugging purpose
这样可以得到更多的debug信息。
我得到这样的信息:main warning: late buffer for mux input
经过查阅发现,正确的解决方法就是,在transcode里设置venc=x264{preset=ultrafast,tune=zerolatency}这样的参数:
sprintf(smem_options_transcode,"#transcode{venc=x264{preset=ultrafast,tune=zerolatency},acodec=none}:rtp{mux=ts,dst=127.0.0.1,port=5004}");
这样延迟可以控制在3秒以内,当然了,可以使用其他的方法进一步减少延迟,譬如在client端减少caching的数值等等。
解决方法参考:
https://forum.videolan.org/viewtopic.php?f=4&t=95364
2012年2月14日星期二
图像Preprocessing使用FPGA, CPU, GPU
很久没有写“数字图像处理”系列的文章,今天非常简单的介绍一下Preprocessing使用FPGA, CPU, GPU的效能。
几乎所有的标准的Preprocessing函数都可以归入以下5个主要的类别中:
- Pixel operations: (in)homogeneous
- Histogram or LUT based functions
- Neighbor operations
- Random access operations
- Geometrical transformations
Performance(效能)是我们这里所关心的,不同的architectures(架构)适用于不同的operations(运算),例如下表所示:
| Operation | CPU | GPU | FPGA |
| Pixel | + | ++ | ++ |
| Histogram / LUT | ++ | - | ++ |
| Neighbor / Kernel | - | ++ | ++ |
| Random Access | ++ | - | - |
| Geometrical Transformations | + | ++ | - |
| Architecture | SISD SIMD | SIMD | MISD |
2011年2月10日星期四
数字图像处理笔记(2)
继续记录Digital Image Processing一些重要的概念,关于图像解析度,以实用知识为主。
逐行扫描(Progressive scan):每一帧图像由电子束顺序地一行接着一行连续扫描而成,这种扫描方式称为逐行扫描。
隔行扫描(Interlaced scan):每一帧图像通过两场扫描完成则是隔行扫描,两场扫描中,第一场(奇数场)只扫描奇数行,而第二场(偶数场)只扫描偶数行。隔行扫描技术在传送信号带宽不够的情况下起了很大作用,逐行扫描和隔行扫描的显示效果主要区别在稳定性上面,隔行扫描的行间闪烁比较明显,逐行扫描克服了隔行扫描的缺点,画面平滑自然无闪烁。在电视的标准显示模式中,i表示隔行扫描,p表示逐行扫描。[1]
有用小常识:
a) 视觉惰性(视觉暂留特性):每秒换帧24次,人会产生连续感。
b) 图像的闪烁感:人在较低频率的光脉冲刺激下,会产生一明一暗的闪烁感,这是有光和无光在亮度感觉上的差别所致。把闪烁的频率提高到临界闪烁频率(45.8Hz)以上,由于视觉惰性的作用就感觉不到闪烁了。电影的帧频为24,其实也写成24p(电影胶片),利用光活门,使每帧画面闪亮两次,达到每秒闪亮48次,超过临界闪烁频率。
c) 场频率:如使用隔行扫描,就会有场频率一说,就是一帧图像分两场传输,常见的60Hz,50Hz对应的帧频率就是30,25。
d) 我们常见的1080i50就是1920×1080像素,每秒50个场的速度交织编码(25帧)[3]。
e) PAL和NTSC
50i(PAL):全名为逐行倒相 (Phase Alternating Line)。每秒25帧,隔行扫描的电视广播格式。[4]
60i(NTSC):属于同时制,每秒60/1.001场。但存在相位容易失真、色彩不太稳定的缺点。NTSC标准的帧幅为每秒30帧。[5]
f) 数字电视,传统的PAL和NTSC陆续被淘汰,取而代之的是数字电视,数字电视其实就是将画面信号经数位化处理后,变成一串数据资料,再经数位调变传送到家。
简单的说,数字电视的成功,主因是视频压缩技术的发展。国际统一的压缩标准是MPEG-2,在传统无线电视台600万赫兹频宽的电视频道中,可传送1080条水平扫描线的高画质电视(HDTV高清晰度电视)。它同时也提供杜比的AC3级高级音响效果。
高清的播放分辨率有 3 种:
768i (i 表示隔行扫描)
1080i(i 表示隔行扫描)
1080p(P 表示逐行扫描)
HDTV高清晰度电视(High Definition Television)的扫描格式共有 3 种[2]:
1280×720p
1920×1080i
1920×1080p
中国采用的 1920×1080i/50Hz。
全高清分辨率为1920×1080的高清信号。
例如,不做任何压缩:
高清640*480的彩色图像,每秒30帧,则一秒钟的数据量为:
640*480*24*30 = 221.12 M
NTSC视频信号720*480,每秒30帧,则一秒钟的数据量为:
720*480*24*30 = 248.83 M
高清1920x1080的彩色图像,每秒30帧,则一秒钟的数据量为:
1920*1080*24*30 = 1492992000 bit = 1.5 G
-->
必须对视频信号进行编码压缩[2]。
注意,我们有可能搞混的是:
a)在描述数据传输时的计算如下(In some cases when used to describe data transfer rates bits/bytes are calculated as in the metric system as follows):
1 MB = 1,000,000 bits/bytes
1 kb = 1,000 bits/bytes
1 bit/byte
b)在描述数据储存是的计算如下(In the cases when used to describe data storage bits/bytes are calculated as follows):
1 byte = 8 bits
1 kilobyte (K / Kb) = 2^10 bytes = 1,024 bytes
1 megabyte (M / MB) = 2^20 bytes = 1,048,576 bytes
1 gigabyte (G / GB) = 2^30 bytes = 1,073,741,824 bytes
1 terabyte (T / TB) = 2^40 bytes = 1,099,511,627,776 bytes
1 petabyte (P / PB) = 2^50 bytes = 1,125,899,906,842,624 bytes
1 exabyte (E / EB) = 2^60 bytes = 1,152,921,504,606,846,976 bytes
附注:在数据通信中, 1 kilobit 是 1000 bits。它通常用于测量是在一秒钟两个通信点之间传输的数据量。千比特每秒,通常缩写为Kbps。
下一篇笔记将关于,数据冗余,编码压缩。
参考资料:
[1] 逐行扫描与隔行扫描: http://baike.baidu.com/view/115294.htm
[2] 数字图像处理(第2版),Rafael C.Gonzalez / Richard E.Woods,电子工业出版社
[3] 高清晰度电视: http://zh.wikipedia.org/zh-cn/高清晰度电视
[4] PAL制式:http://zh.wikipedia.org/zh/PAL制式
[5] NTSC制式:http://zh.wikipedia.org/zh/NTSC制式
2011年2月8日星期二
数字图像处理笔记(1)
最近的一些研究涉及了数字图像处理。这里我准备开一个小小的系列,放入我最近的一些学习的笔记。
Digital Image Processing是一个很有趣的领域。接下来我按照我的喜好,记录一些重要的概念。
我们大概都知道,在计算机中,静态的图像有两种表达形式:
矢量图,vector based image
位图,bit mapped image,(位图里又有灰度图(grap scale image),彩色图(color image))
矢量图,顾名思义,也就是可以用计算机的指令来描述的,图像中的每一的元素都可以使用数学表达式来实现。所有一个矢量图会由很多的数学表达式来进行描述。我们常常使用最简单的visio就可以做矢量图,当然了adobe illustrator是一个做矢量图的利器。
矢量图有很多优点,1.可以进行不失真的缩放,2.可以容易的移动复制,甚至旋转,3.矢量图产生的数据量比较小。
矢量图的一个很明显的缺点是使用场合有所限制,因为很多复杂的图像无法使用数学表达式来描述。
位图,计算机中最广泛使用,其实就是一幅图由很多的像素(也可以说是由像素矩阵)组成的。
每一个像素pixel其实在计算机里就是由一定长度的数字值来表示它的颜色和亮度。如果单位面积内的像素越多,那么分辨率就越高,所显示的图像就会接近于真实物体。
如果图像的深度越高,或是图像的分辨率越高,那么位图的大小就越大。
色彩深度,色彩深度又叫色彩位数,即位图中要用多少个二进制位来表示每个点的颜色,是分辨率的一个重要指标,例如16位(增强色),24位和32位等。
例子:
例如一个图像,RGB三个分量,每个8位,一共就是24位,像素的深度为24,每个像素就是2的24次方就是16777216的一种,其实人是无法分辨这么多颜色的。
位图常用的编码方式有:
RGB,红、绿、蓝三原色的光学强度。
CMYK,用青、品红、黄、黑四种颜料含量来表示一种颜色
常常还有Alpha通道,也就是增加像素的透明度信息。
我们常常见到的图像格式有:
BMP(Bitmap Image File or Device Independent Bitmap (DIB) file format or simply a Bitmap)
GIF(Graphics Interchange Format)
PNG(Portable Network Graphics)
JPEG(Joint Photographic Experts Group),附带提一下它是基于Discrete Cosine Transform离散余弦变换,转换到频率空间,JPEG有选择地选择数据来压缩文件,会丢弃一些数据,使用是有损压缩。
参考资料:
http://zh.wikipedia.org/zh-cn/%E5%83%8F%E7%B4%A0
http://zh.wikipedia.org/zh/%E4%BD%8D%E5%9B%BE
http://zh.wikipedia.org/zh/Jpeg
http://zh.wikipedia.org/zh/Bmp
http://zh.wikipedia.org/zh/Png
http://zh.wikipedia.org/zh/GIF


