__2017-12-16 如一模式识别研究

如一模式识别研究

OPENCV>>OpenCV-Filter篇

转自:http://www.cnblogs.com/steven-blog/archive/2012/12/14/2919267.html

《OpenCV 2 Computer Vision Application Programming Cookbook》

Chapter 6 Filtering the Images

滤波器。第一次接滤波器的概念,是在大二的电子设计实验课和信号与系统这两门课上。顾名思义,滤波,就是将信号的某些个频段的波给去掉,比如说像低通滤波器(low-pass filter),就是将高频段的波去掉,只允许低频波通过。对应到图像处理上,就是去观察图像的各个像素值的变化和分布。比如说,一副画有天空的图片,其大部分颜色都是蓝色,所以其像素变化小,可以归到“低频段”;相反的,一副画有各种场景、人物、物体的图像,其像素种类多、变化快,相对的就可以归到“高频段”了。工程上将这种方法叫做频域(frequency domain)分析,而在图像处理上叫做空间域(spatial domain)分析。这也是工程概念在图像处理上的一个典型应用。

卷积。在大二的复变函数和信号与系统这两门课上学过。不过因为遗忘再加上当年没学好,所以在看这章的时候相对来说有些吃力。在这里,卷积是图像处理中好多变换的基础,而其功能的实现主要是由其卷积核的形式来决定的。这个核本质上是一个大小固定、由数值参数参数组成的一个数组,数组的参考点(anchor pointer)通常位于数组的中心。以一个3*3卷积核为例:若要计算一个特定点的倦极值,将核的参考点与该点对应,核的其余元素与特定点周围的像素一一对应,将这些值相乘求和,并将结果放到参考点所对应点的位置。通过在整个图像上扫描卷积核,就可以实现对图像所有像素值的卷积操作从而实现莫种图像变换。

Sobel Filter:求导(近似)。参考《学习OpenCV》P171:Sobel导数并不是真正的导数,因为Sobel导数定义在一个离散空间之上。Sobel算子真正表示的多项式拟合,也就是说,x方向上的二阶Sobel导数并不是真正的导数。它是对抛物线函数的局部拟合。这么理解,导数的大小表示的数值变化的程度,对应到图像处理上,就是反映各个像素值变化的快慢了(高数不好,先这么理解了)。

4. Laplace变换,实现类似二阶Sobel导数。

下面是一个Sobel函数的简单应用(边缘检测)

边缘一般是图像变化较快的“频段”,利用Sobel的方向性和高通性便可以很快的检测到图像的边缘了。

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

//Chapter 6:Filtering the image

//By Steven 2012.11.13

#include "opencv2/core/core.hpp"

#include "opencv2/highgui/highgui.hpp"

#include "opencv2/imgproc/imgproc.hpp"

#include

using namespace cv;

using namespace std;

//using directional filter to detect edges

int main()

{

cv::Mat image=cv::imread("D:\\opencvStudy\\pic\\boldt.jpg");

if(!image.data)

std::cout<<"Error loading the picture"<

cv::Mat soble_x,soble_y;

cv::Sobel(image,soble_x,CV_16S,1,0);

cv::Sobel(image,soble_y,CV_16S,0,1);

cv::Mat soble;

//compute the L1 norm

soble=abs(soble_y)+abs(soble_x);

//find sobel max value

double sobmin,sobmax;

cv::minMaxLoc(soble,&sobmin,&sobmax);

//vonvert to 8-bit image

//sobelimage=-alpha*sobel+255;

cv::Mat sobelImage;

soble.convertTo(sobelImage,CV_8U,-255./sobmax,255);

imshow("soble",soble);

//cv::threshold(sobelImage,sobelImage,200,255,cv::THRESH_BINARY);

imshow("sobelImage",sobelImage);

waitKey(0);

return 0;

}

数学功底不好,只能理解这么多了。有待继续学习。

Steven

2012.11.14

作者:StevenMeng 出处:http://www.cnblogs.com/steven-blog/欢迎转载或分享,但请务必声明文章出处。

标签: OpenCV

评论留言区

:
  

作者: 游客 ; *
评论内容: *
带*号为必填项目

如一模式识别更新提示

matlab在图像处理方面的应用有更新

如一模式识别 友情链接

关于本站作者     chinaw3c     mozilla