2018-08-30 22:12:20 qq_28467367 阅读数 377
  • 数字图像处理实战

    本课程内容主要选取自stanford EE368/CS232 课程的学生作业。我将给大家分享几个有趣案例,争取把算法流程原理、代码部署都讲清楚。本次课程包含图像算法和机器学习,编程工具主要包括python,c++,android,matlab,opencv,Tesseract等。 由于个人时间精力有限,课程将每隔2-3周发布一次。

    267 人正在学习 去看看 金圣韬

第2章 数字图像变换

2.1 图像的空间变换
2.1.1 图像的几何变换
(1)图像的平移变换
(2)图像的比例变换
(3)图像旋转变换
(4)图像镜像变换
2.1.2 灰度级插值
(1)最近邻插值法
(2)双线性插值法,具有低通滤波性质
(3)三次内插值法
2.1.3 图像的邻域操作

2.2 图像的傅里叶变换
2.2.1 什么是频率域
频域反应了图像在空域灰度变化的剧烈程度,也是图像灰度的变化度,即图像的梯度大小。图像的频域处理是指根据一定的图像模型,对图像频谱进行不同程度修改的技术。

2.3 图像的余弦变换
2.3.1 从DFT到DCT
2.3.3 离散余弦变换的性质
2.3.4 离散余弦变换应用:基于DCT的图像去噪

2.4 图像滤波
2.4.1 空域滤波
(1)领域平均法
(2)加权均值滤波
(3)中值滤波
2.4.2 频域滤波

2.5 图像的小波变换
2.5.1 小波分析的起源
2.5.2 连续小波变换
2.5.3 离散小波变换
2.5.4 小波变换的步骤及特点
2.5.5 例程精讲
2.5.6 小波变换的应用:基于小波变换的图像增强

2.6 图像的Hough变换
2.6.1 Hough变换的基本原理
2.6.2 例程精讲
2.6.3 融会贯通:基于Hough变换检测圆

2.7 图像的Walsh-Hadamard变换
2.7.1 Walsh-Hadamard变换的基本原理
2.7.2 例程精讲
2.7.3 Walsh-Hadamard变换在图像压缩领域的应用

2.8 图像的K-L变换
K-L变换( Karhunen-Loeve Transform)是建立在统计特性基础上的一种变换,又称特征向量变换,主分量变换,霍特林(Hotelling)变换。
主要应用:
(1)降维与压缩
(2)构造参数模型
(3)人脸识别
2.8.1 K-L变换的基本原理
2.8.2 例程精讲

2.9 基于数学形态学的图像变换
2.9.1 数学形态学的起源
2.9.2 熟悉数学形态学的基本运算
第3章 数字图像分析
3.1 图像的色彩空间
3.1.1 常见的色彩空间
RGB、HSV、YUV、HSI色彩空间、灰度空间
3.1.2 例程精讲
3.1.3 彩色增强
3.2 图像的直方图
3.2.1 灰度直方图
3.2.2 例程精讲
3.2.3 融会贯通
3.2.4 应用:基于直方图的对比度增强
3.3 图像的纹理特征分析
3.3.1 什么是&”图像的纹理特征&”
3.3.2 灰度共生矩阵
3.3.3 例程精讲
3.3.4 融会贯通:灰度-梯度共生矩阵
3.4 图像的自相关函数
3.4.1 图像的自相关函数
3.4.2 例程精讲
3.4.3 图像局部自相关函数
3.5 视频图像分析与处理
3.5.1 视频图像及其特点分析
3.5.2 视频序列图像分析
3.5.3 视频序列图像处理
3.6 图像质量的评价
3.6.1 图像质量的客观评价
3.6.2 图像质量的主观评价

第4章 图像特征提取
4.1 图像的不变矩
4.1.1 不变矩的基本原理
4.1.2 例程精讲
4.2 图像的边缘检测
4.2.1 运用一阶微分算子检测图像边缘
4.2.2 运用二阶微分算子检测图像边缘
4.2.3 基于Canny算子检测图像边缘
4.2.4 基于SUSAN特征检测算子的边缘提取

4.3 Harris角点检测

(1)基于图像边缘的检测
(2)基于图像灰度的检测:通过计算点的曲率及梯度来检测角点。

4.3.1 何谓”角点”
4.3.2 Harris角点的基本原理
4.3.3 Harris角点的实现步骤

(1)参数a对角点检测的影响:
增大a的值,将减小角点响应值R,降低角点检测的灵性,减少被检测角点的数量;减小a值,将增大角点响应值R,增加角点检测的灵敏性,增加被检测角点的数量。
(2)Harris角点检测算子对亮度和对比度的变化不敏感
(3)Harris角点检测算子具有旋转不变性
(4)Harris角点检测算子不具有尺度不变性

4.3.5 例程精讲

4.4 SIFT特征提取与描述
4.4.1 SIFT算法

SIFT(Scale Invariant Feature Transform)
主要思路是:首先建立图像的尺度空间表示,然后再尺度空间中搜索图像的极值点,由极值点再建立特征描述向量,最后用特征描述向量进行相似度匹配。


采用SIFT 方法提取的图像特征具有放缩不变性、旋转不变性,仿射不变性,还有一定的抗光照变化和抗视点变换性能。该特征还具有高度的可区分性,能够在一个具有大量特征数据的数据库中进行精确地匹配。SIFT还使用金字塔算法大大缩小了提取特征时的运算量。


计算方法分为四个步骤:尺度空间极值提取、特征点定位、特征方向赋值和提取特征点描述。
(1)尺度空间极值检测:使用差分高斯(Difference of Gaussina,DoG)极值为判断依据。
(2)确定关键点位置及尺度:剔除对比度低的点,剔除边缘点。
(3)关键点方向确定。

4.4.2 SIFT特征描述
4.4.3 例程精讲

4.5 SURF特征提取与描述
4.5.1 积分图像
4.5.2 DoH近似
4.5.3 尺度空间表示
4.5.4 SURF特征描述算子
4.5.5 例程一点通
第5章 图像识别技术
5.1 模式识别的概念
5.1.1 什么是模式识别
5.1.2 模式识别的主要方法
5.1.3 模式识别的应用
5.2 基于图像的模式识别方法
5.2.1 句法模式识别
5.2.2 统计模式识别
5.2.3 模糊模式识别
5.2.4 神经网络模式识别
5.3 基于图像模式识别的过程
5.4 基于神经网络与矩特征的模式识别
5.4.1 神经网络简介
5.4.2 识别算法实现流程
5.4.3 例程精讲
5.4.4 实验结果
第6章 实战案例详解
6.1 测绘领域的应用:基于SURF的图像拼接
6.1.1 研究图像拼接的意义
6.1.2 基本原理及实现步骤
6.1.3 例程精讲
6.1.4 实际中需要注意的问题
6.2 信息安全领域的应用:基于小波变换的数字水印技术
6.2.1 数字水印技术
6.2.2 嵌入数字水印的基本原理
6.2.3 数字水印的特点
6.2.4 基于小波变换的数字水印嵌入
6.2.5 例程精讲
6.3 多媒体通信领域的应用:基于PIFS分形压缩编码技术
6.3.1 压缩编码概述
6.3.2 基于PIFS的图像压缩
6.4 安防领域的应用:高效视频监控系统
6.4.1 视频监控系统的基本原理
6.4.2 基于 Computer Vision System的系统设计
6.5 交通领域中的应用:基于视频的车流量统计
6.5.1 车流量检测系统
6.5.2 基于高斯混合背景模型的背景建模
6.5.3 例程精讲
第7章 思维技法点拨
7.1 学习点拨:谈学习数字图像处理的经验
7.1.1 面向应用:层层分解、抓住要点
7.1.2 面向学习:追根溯源、比较总结
7.2 思维点拨:运用Triz思维,突破图像处理瓶颈
7.2.1 Triz理论概述
7.2.2 实例分析:运用Triz理论改进Hough变换的实时性
7.3 方法点拨:基于MDA(模型驱动构架)的图像处理
7.3.1 模型驱动开发思想概述
7.3.2 模型驱动开发的优势
7.3.3 模型驱动开发在图像处理领域中的应用
7.3.4 基于Simulink-Blocks的模型驱动开发图像处理
7.4 技巧点拨:仿生理论助力图像处理技术发展
7.4.1 仿生理论与图像处理技术相结合的优势
7.4.2 实例分析:猫视觉皮层仿生的图像分割
附录
附录A 常用MATLAB图像处理指令功能语法索引
附录B 系统对象功能汇总
附录C Triz矛盾矩阵表39项技术参数及40条创新原理

2016-11-07 20:11:00 weixin_30933531 阅读数 29
  • 数字图像处理实战

    本课程内容主要选取自stanford EE368/CS232 课程的学生作业。我将给大家分享几个有趣案例,争取把算法流程原理、代码部署都讲清楚。本次课程包含图像算法和机器学习,编程工具主要包括python,c++,android,matlab,opencv,Tesseract等。 由于个人时间精力有限,课程将每隔2-3周发布一次。

    267 人正在学习 去看看 金圣韬

10545861.jpg
21281383.jpg
45017264.jpg
49569636.jpg
34922739.jpg
81278813.jpg

转载于:https://www.cnblogs.com/chan7/p/6040450.html

2018-05-19 17:13:27 hanyong4719 阅读数 203
  • 数字图像处理实战

    本课程内容主要选取自stanford EE368/CS232 课程的学生作业。我将给大家分享几个有趣案例,争取把算法流程原理、代码部署都讲清楚。本次课程包含图像算法和机器学习,编程工具主要包括python,c++,android,matlab,opencv,Tesseract等。 由于个人时间精力有限,课程将每隔2-3周发布一次。

    267 人正在学习 去看看 金圣韬
#读取一张图片
with tf.gfile.GFile('photos/1.jpg','rb') as f:
    image = f.read()
    
with tf.Session() as sess:
    #解码
    image_data = tf.image.decode_jpeg(image)
    print('原图')
    plt.imshow(image_data.eval())
    plt.show()
    #image_data = tf.image.convert_image_dtype(image_data,tf.float32)
    
    #重新保存图像
    encode_image = tf.image.encode_jpeg(image_data)
    with tf.gfile.GFile('photos/output.jpg','wb') as f:
        f.write(encode_image.eval())
        
    #tf.image.resize_images:将原始图像缩放成指定的图像大小
    resized = tf.image.resize_images(image_data,[400,400],method=0)
    
    # TensorFlow的函数处理图片后存储的数据是float32格式的,需要转换成uint8才能正确打印图片。
    resized = np.asarray(resized.eval(), dtype='uint8')
    print('tf.image.resize_images:')
    plt.imshow(resized)
    plt.show()
    
    #tf.image.resize_image_with_crop_or_pad:剪裁或填充处理
    pad = tf.image.resize_image_with_crop_or_pad(image_data,600,600)
    crop = tf.image.resize_image_with_crop_or_pad(image_data,300,300)
    print('tf.image.resize_image_with_crop_or_pad:')
    plt.imshow(crop.eval())
    plt.show()
    plt.imshow(pad.eval())
    plt.show()
    
    #tf.image.central_crop:比例调整,central_fraction决定了要指定的比例,取值范围为(0,1]
    print('tf.image.central_crop:')
    central_crop = tf.image.central_crop(image_data,0.5)
    plt.imshow(central_crop.eval())
    plt.show()
    
    #上下反转
    flipped = tf.image.flip_up_down(image_data)
    print('上下反转')
    plt.imshow(flipped.eval())
    plt.show()
    #左右翻转
    flipped = tf.image.flip_left_right(image_data)
    print('上下反转')
    plt.imshow(flipped.eval())
    plt.show()
    #亮度调整
    adjust = tf.image.adjust_brightness(image_data,0.5)
    print('调整亮度')
    plt.imshow(adjust.eval())
    plt.show()
    #在[-delta,delta]之间随机调整亮度
    adjust = tf.image.random_brightness(image_data,0.5)
    plt.imshow(adjust.eval())
    plt.show()
    #调整对比度
    adjust = tf.image.adjust_contrast(image_data,5)
    plt.imshow(adjust.eval())
    plt.show()
    #随机调整对比度
    adjust = tf.image.random_contrast(image_data,-5,5)
    plt.imshow(adjust.eval())
    plt.show()
    #加色相
    adjust = tf.image.adjust_hue(image_data,0.2)
    plt.imshow(adjust.eval())
    plt.show()
    #在[0,delta]之间随机加色相
    adjust = tf.image.random_hue(image_data,0.3)
    plt.imshow(adjust.eval())
    plt.show()

2018-12-28 15:12:21 qq_36251561 阅读数 453
  • 数字图像处理实战

    本课程内容主要选取自stanford EE368/CS232 课程的学生作业。我将给大家分享几个有趣案例,争取把算法流程原理、代码部署都讲清楚。本次课程包含图像算法和机器学习,编程工具主要包括python,c++,android,matlab,opencv,Tesseract等。 由于个人时间精力有限,课程将每隔2-3周发布一次。

    267 人正在学习 去看看 金圣韬

粗定位,又称简单模板匹配,是一种在工业图像处理上最常见的方法。该方法精确度高,识别时间短。

他的一个最大的好处就是能够在目标位置不确定的情况下,粗略的定位目标。因此该方法多使用于背景复杂、目标位置不固定、但检测目标清晰的情况下。

在这里主要以Opencv的方式(cvMatchTemplate)说明。

1.创建模板图像

     一般情况下,采用ROI的方式从原图上将模板图像抠出。存成文件的形式,这样在软件下次打开的时候就不需要再去学习。

2.确定定位区域

cvMatchTemplate

Cvnormalize

CvminMaxLoc

具体的代码如下(随手Copy来的,具体的函数定义和使用方法其他人博客里有,我就不多说了)

    Mat SrcImg;//原图像
    Mat MdoImag;//模板图像
    Mat result;//结果
   
    //这部分是有个公式固定好的
    int result_cols = img.cols - templ.cols + 1;
    int result_rows = img.rows - templ.rows + 1;
    result.create(result_cols, result_rows, CV_32FC1);
   
    matchTemplate(img, templ, result, CV_TM_SQDIFF_NORMED);
    normalize(result, result, 0, 1, NORM_MINMAX, -1, Mat());
    double minVal = -1;
    double maxVal;
    Point minLoc;
    Point maxLoc;
    Point matchLoc;
    minMaxLoc(result, &minVal, &maxVal, &minLoc, &maxLoc, Mat());
    matchLoc = minLoc;
    
    rectangle(img, matchLoc, Point(matchLoc.x + templ.cols, matchLoc.y + templ.rows), Scalar(0, 255, 0), 2, 8, 0);

在这里,我们最终能够得到匹配度和匹配矩形区域,一般情况下可以选取匹配矩形区域的中心点作为一个最佳匹配点。然后控制匹配度的大小用来返回匹配成功还是失败。
3.安装最佳匹配点从新生成检测区域

在得到最佳匹配点之后,我们可以用这个点去做二次ROI,然后就能更加精确的去做精确定位。

2018-12-01 11:38:50 qq_38662930 阅读数 81
  • 数字图像处理实战

    本课程内容主要选取自stanford EE368/CS232 课程的学生作业。我将给大家分享几个有趣案例,争取把算法流程原理、代码部署都讲清楚。本次课程包含图像算法和机器学习,编程工具主要包括python,c++,android,matlab,opencv,Tesseract等。 由于个人时间精力有限,课程将每隔2-3周发布一次。

    267 人正在学习 去看看 金圣韬

keras常用语法

Sequential模型
Keras一般用Sequential模型做为搭建神经网络的开始,本节简要论述Sequential模型接口的主要使用方法。
add(self,layer)
用途:向模型中添加一个层。
参数layer是Layer对象,也即是层。
pop(self)
用途:弹出模型最后的一层,无返回值,该方法一般很少用到。
compile(self,optimizer,loss,metrics=None,sample_weight_mode=None)
该方法编译用来配置模型的学习过程,其参数有以下这些:

  • optimizer:字符串(预定义优化器名)或优化器对象,参考优化器。
  • loss:字符串(预定义损失函数名)或目标函数,参考损失函数。
  • metrics:列表,包含评估模型在训练和测试时的网络性能的指标,典型用法是 metrics=[‘accuracy’]。
  • sample_weight_mode:如果你需要按时间步为样本赋权(2D权矩阵),将该值设
    为“temporal”。默认为“None”,代表按样本赋权(1D权)。
  • kwargs:使用TensorFlow作为后端请忽略该参数,若使用Theano作为后端,kwargs的 值将会传递给K.function。

model=Sequential()
model.add(Dense(32,input_shape(500,)))
model.add(Dense(10,activation='softmax'))
model.compile(optimizer='rmsprop',
loss='categorical_crossentropy',metrics=['accuracy'])

该例子添加两个Dense层,并用rmsprop优化器进行优化,损失函数定义为
categorical_crossentroy,各种损失函数的含义在后面章节中会提高。
模型在使用前必须编译,否则在调用fit或evaluate时会抛出异常。

fit(self,x,y,batch_size=32,epochs=10,verbose=1,callbacks=None,validation_split=0.0,val)
.

本函数将模型训练epoch轮,其参数有:

  • x:输入数据。如果模型只有一个输入,那么x的类型是numpyarray,如果模型有多
    个输入,那么x的类型应当为list,list的元素是对应于各个输入的numpyarray。
  • y:标签向量,numpyarray类型。
  • batch_size:整数,指定进行梯度下降时每个batch包含的样本数。训练时一个batch的
    样本会被计算一次梯度下降,使目标函数优化一步。
  • epochs:训练的轮数,每个epoch会把训练集轮一遍。
  • verbose:日志显示,0为不在标准输出流输出日志信息,1为输出进度条记录,2为每个epoch输出一行记录。
  • callbacks:list,其中的元素是keras.callbacks.Callback的对象。这个list中的回调函数将会在训练过程中的适当时机被调用,参考回调函数
  • validation_split:0~1之间的浮点数,用来指定训练集的一定比例数据作为验证集。注意,validation_split的划分在shuffle之前,因此如果你的数据本身是有序的,需要先手工打乱再指定validation_split,否则可能会出现验证集样本不均匀。
  • validation_data:形式为(X,y)的tuple,是指定的验证集。此参数将覆盖validation_spilt参数。
  • shuffle:布尔值或字符串,一般为布尔值,表示是否在训练过程中随机打乱输入样本的顺序。若为字符串“batch”,则是用来处理HDF5数据的特殊情况,它将在batch内部将数据打乱。
  • class_weight:字典,将不同的类别映射为不同的权值,该参数用来在训练过程中调整损失函数(只能用于训练)。
  • sample_weight:权值的numpyarray,用于在训练时调整损失函数(仅用于训练)。可以传递一个1D的与样本等长的向量用于对样本进行1对1的加权,或者在面对时序数据时,传递一个的形式为<samples,sequence_length>的矩阵来为每个时间步上的样本赋不同的权。这种情况下请确定在编译模型时添加了
    sample_weight_mode=‘temporal’。
  • initial_epoch:从该参数指定的epoch开始训练,在继续之前的训练时有用。

fit函数返回一个History的对象,其History.history属性记录了损失函数和其他指标的数值随epoch变化的情况,如果有验证集的话,也包含了验证集的这些指标变化情况。

evaluate(self,x,y,batch_size=32,verbose=1,sample_weight=None)

  • x:输入数据,与fit一样,是numpyarray或numpyarray的list。

  • y:标签,numpyarray。

  • batch_size:整数,含义同fit的同名参数。

  • verbose:含义同fit的同名参数,但只能取0或1。

  • sample_weight:numpyarray,含义同fit的同名参数。

本函数返回一个测试误差的标量值(如果模型没有其他评价指标),或一个标量的list(如果模型还有其他的评价指标)。model.metrics_names将给出list中各个值的含义。
如果没有特殊说明,以下函数的参数均保持与fit的同名参数相同的含义。

predict(self,x,batch_size=32,verbose=0)

本函数按batch获得输入数据对应的预测结果,其中x是输入向量,batch_size是每批次选取 的数据集数量。
函数的返回值是预测值的numpyarray。

predict_classes(self,x,batch_size=32,verbose=1)

本函数按batch产生输入数据的类别预测结果,它和predict的区别是:
Predict返回各个类别的可能性结果,是一个n维向量,n等于类别的数量;而predict_classes
返回的是最可能的类别,对每个输入返回的是类别名称。 函数的返回值是类别预测结果的numpyarray或numpy。

train_on_batch(self,x,y,class_weight=None,sample_weight=None)

本函数在一个batch的数据上进行一次参数更新。 函数返回训练误差的标量值或标量值的list,与evaluate的情形相同

test_on_batch(self,x,y,sample_weight=None)

本函数在一个batch的样本上对模型进行评估。 函数的返回与evaluate的情形相同。

predict_on_batch(self,x)

本函数在一个batch的样本上对模型进行测试。 函数返回模型在一个batch上的预测结果。

fit_generator(self,generator,steps_per_epoch,epochs=1,verbose=1,callbacks=None,validatio)

利用Python的生成器,逐个生成数据的batch并进行训练。生成器与模型将并行执行以提高效率。例如,该函数允许我们在CPU上进行实时的数据提升,同时在GPU上进行模型训练。
函数返回一个History对象

函数的参数是:

  • generator:生成器函数,生成器的输出应该为: a)一个形如(inputs,targets)的tuple。 b)一个形如(inputs,targets,sample_weight)的tuple。所有的返回值都应该包含相同数目的样本。生成器将无限在数据集上循环。每个epoch以经过模型的样本数达到 samples_per_epoch时,记一个epoch结束。 steps_per_epoch:整数,当生成器返回steps_per_epoch次数据时计一个epoch结束,执 行下一个epoch。
  • epochs:整数,数据迭代的轮数。
  • verbose :日志显示,0为不在标准输出流输出日志信息,1为输出进度条记录,2为每 个epoch输出一行记录。
  • validation_data:具有以下三种形式之一。 a)生成验证集的生成器。
    b)一个形如(inputs,targets)的tuple。
    c)一个形如(inputs,targets,sample_weights)的tuple。
    validation_steps:当validation_data为生成器时,本参数指定验证集的生成器返回次数。
  • class_weight:规定类别权重的字典,将类别映射为权重,常用于处理样本不均衡问题。
  • sample_weight:权值的numpyarray,用于在训练时调整损失函数(仅用于训练)。可以传递一个1D的与样本等长的向量用于对样本进行1对1的加权,或者在面对时序数据时,传递一个的形式为(samples,sequence_length)的矩阵来为每个时间步上的样本赋不同的权。这种情况下请确定在编译模型时添加了
  • sample_weight_mode=‘temporal’。
  • workers:最大进程数。
  • max_q_size:生成器队列的最大容量
  • pickle_safe:若为真,则使用基于进程的线程。由于该实现依赖多进程,不能传递nonpicklable(无法被pickle序列化)的参数到生成器中,因为无法轻易将它们传入子进
    程中。
  • initial_epoch:从该参数指定的epoch开始训练,在继续之前的训练时有用。
defgenerate_arrays_from_file(path):
	while 1:
		f=open(path)
		for	line in	f:
		#create Numpy arrays of inputdata 
		#and labels from each line in thefile
,
			x,y=process_line(line)
			yield(x,y)
		f.close()
		model.fit_generator(generate_arrays_from_file('/my_file.txt'),
samples_per_epoch=10000,epochs=10)
没有更多推荐了,返回首页