2010-01-31 16:08:00 zouwen198317 阅读数 1663
  • 大数据—Scala

    一、Scala核心编程课程简介 近年来随着大数据的兴起,大数据核心框架Spark和Kafka也受到到广泛关注, Spark底层是Scala实现的, 因此也带火了Scala语言,目前Scala被全球知名公司(如:谷歌、百度、阿里、Twitter、京东等)广泛用于Spark开发。新一代的物联网时代到来,会对大数据应用人才的需求越加紧迫。 尚硅谷网罗和整合了学员很喜爱的师资,打造出专注于Spark开发的Scala课程,我们讲解Scala核心编程技术,同时也讲解编程思想、设计模式和Scala底层实现,让您有豁然开朗的感受。 二、课程内容和目标 本课程重点讲解Scala核心编程,内容包括: Scala语言概述、运算符、程序流程控制、数据结构之集合、Map映射、过滤、化简、折叠、扫描、拉链、视图、并行集合、高阶函数、函数柯里化、偏函数、参数推断、控制抽象、Trait、面向对象编程、异常处理、惰性函数、Akka及Actor模型、Spark Master和Worker通讯、隐式转换、隐式参数、工厂模式、单例模式、观察者模式、装饰者模式、代理模式、泛型、上下界、视图界定、上下文界定、协变逆变不变和源码剖析。通过系统全面的学习,学员能掌握Scala编程思想和Scala底层机制,为进一步学习Spark打下坚实基础。 三、谁适合学 1.希望以较低的投入和风险,来了解自己是否适合转型从事Spark开发的求职人员。 2.有一定的Java基础,或者自学过一些Java书籍与视频资料,想系统掌握Scala语言的程序员。

    2893 人正在学习 去看看 缪传海

维基百科旋转不变性的定义:在数学里,给予一个定义于内积空间函数,经过任意旋转,其参数值可能会改变,但是函数值仍旧保持不变,则称此性质为旋转不变性。例如,将 xy-平面绕着 z-轴旋转,xy的值变化,但Z值不变。

最近在研究CV时,

在图像锐化的时候,看到有一句话“拉普拉斯算子是最简单的各向同性微分算子,具有旋转不变性”,才体会到,旋转不变性,在图像处理中是有应用的。好像作用还挺大。在目标边缘检测的时候,目标所在图像在随机的变化,那么检测它的算子就应该具有适应性,尤其在不同的方向。拉普拉斯算子刚好满足这个需求,因为其具有旋转不变性。
 
 

2018-06-10 21:39:16 linxid 阅读数 1649
  • 大数据—Scala

    一、Scala核心编程课程简介 近年来随着大数据的兴起,大数据核心框架Spark和Kafka也受到到广泛关注, Spark底层是Scala实现的, 因此也带火了Scala语言,目前Scala被全球知名公司(如:谷歌、百度、阿里、Twitter、京东等)广泛用于Spark开发。新一代的物联网时代到来,会对大数据应用人才的需求越加紧迫。 尚硅谷网罗和整合了学员很喜爱的师资,打造出专注于Spark开发的Scala课程,我们讲解Scala核心编程技术,同时也讲解编程思想、设计模式和Scala底层实现,让您有豁然开朗的感受。 二、课程内容和目标 本课程重点讲解Scala核心编程,内容包括: Scala语言概述、运算符、程序流程控制、数据结构之集合、Map映射、过滤、化简、折叠、扫描、拉链、视图、并行集合、高阶函数、函数柯里化、偏函数、参数推断、控制抽象、Trait、面向对象编程、异常处理、惰性函数、Akka及Actor模型、Spark Master和Worker通讯、隐式转换、隐式参数、工厂模式、单例模式、观察者模式、装饰者模式、代理模式、泛型、上下界、视图界定、上下文界定、协变逆变不变和源码剖析。通过系统全面的学习,学员能掌握Scala编程思想和Scala底层机制,为进一步学习Spark打下坚实基础。 三、谁适合学 1.希望以较低的投入和风险,来了解自己是否适合转型从事Spark开发的求职人员。 2.有一定的Java基础,或者自学过一些Java书籍与视频资料,想系统掌握Scala语言的程序员。

    2893 人正在学习 去看看 缪传海

图像作为一个像素矩阵,TensorFlow提供了多个函数用于图像处理。TensorFlow的图像处理部分和OpenCV不同,主要服务于深度学习。比如图像的旋转不变性等等。在功能上肯定不如OpenCV丰富。

1、图像编码处理

虽然图片就是一个三维矩阵,但是所有的图片存储时都会被压缩,也就是编码和解码的过程。所以我们从一张图像得到三维矩阵,首先需要解码。

import matplotlib.pyplot as plt
import tensorflow as tf   
import numpy as np

# 对图片进行解码,并且修改其大小,将其打印出来(矩阵值)
image_raw_data = tf.gfile.FastGFile('datasets/cat.jpg','rb').read()
with tf.Session() as sess1:
    img_data = tf.image.decode_jpeg(image_raw_data)
    print(img_data.eval())
    img_data.set_shape([1797, 2673, 3])
    print(img_data.get_shape())

# 利用matplotlib,打印图片
with tf.Session() as sess2:
    plt.imshow(img_data.eval())
    print(img_data.get_shape())
    plt.show()

image.png

2、图像大小调整

对图像的大小进行调整,TensorFlow提供了多种方法,现总结如下。

2.1 放大 缩小

# 对图片进行放大缩小处理,原图信息不变,但是尺寸发生变化
with tf.Session() as sess3:
    # 首先将图像的像素值从0-255,变成浮点数 0-1
    image_float = tf.image.convert_image_dtype(img_data, tf.float32)
    resized = tf.image.resize_images(image_float, [300,300], method=0)

    plt.imshow(resized.eval())
    plt.show()

image.png

调整大小算法(method):
  • method = 0:双线性插值;
  • method = 1:最近邻插值;
  • method = 2:双三次插值;
  • method = 3:面积插值法;

2.2 裁剪 填充

对其进行裁剪或者填充.但是原图像的大小并没有变.

with tf.Session() as sess:    
    croped = tf.image.resize_image_with_crop_or_pad(img_data, 1000, 1000)
    padded = tf.image.resize_image_with_crop_or_pad(img_data, 3000, 3000)
    plt.imshow(croped.eval())
    plt.show()
    plt.imshow(padded.eval())
    plt.show()

image.png
image.png

2.3 按比例调整大小

截取中间50%的图片

with tf.Session() as sess:   
    central_cropped = tf.image.central_crop(img_data, 0.5)
    plt.imshow(central_cropped.eval())
    plt.show()

image.png

3、图像翻转

对图像进行上下,左右的翻转。

with  tf.Session() as sess: 
    # 上下翻转
    #flipped1 = tf.image.flip_up_down(img_data)
    # 左右翻转
    #flipped2 = tf.image.flip_left_right(img_data)

    #对角线翻转
    transposed = tf.image.transpose_image(img_data)
    plt.imshow(transposed.eval())
    plt.show()

    # 以一定概率上下翻转图片。
    #flipped = tf.image.random_flip_up_down(img_data)
    # 以一定概率左右翻转图片。
    #flipped = tf.image.random_flip_left_right(img_data)

image.png

4、对图像进行色彩调整


with  tf.Session() as sess:
    # 在进行一系列图片调整前,先将图片转换为实数形式,有利于保持计算精度。
    image_float = tf.image.convert_image_dtype(img_data, tf.float32)

    # 将图片的亮度-0.5。
    #adjusted = tf.image.adjust_brightness(image_float, -0.5)

    # 将图片的亮度-0.5
    #adjusted = tf.image.adjust_brightness(image_float, 0.5)

    # 在[-max_delta, max_delta)的范围随机调整图片的亮度。
    adjusted = tf.image.random_brightness(image_float, max_delta=0.5)

    # 将图片的对比度-5
    #adjusted = tf.image.adjust_contrast(image_float, -5)

    # 将图片的对比度+5
    #adjusted = tf.image.adjust_contrast(image_float, 5)

    # 在[lower, upper]的范围随机调整图的对比度。
    #adjusted = tf.image.random_contrast(image_float, lower, upper)

    # 在最终输出前,将实数取值截取到0-1范围内。
    adjusted = tf.clip_by_value(adjusted, 0.0, 1.0)
    plt.imshow(adjusted.eval())
    plt.show()

image.png

5、调整图像色相和饱和度

with tf.Session() as sess:
    # 在进行一系列图片调整前,先将图片转换为实数形式,有利于保持计算精度。
    image_float = tf.image.convert_image_dtype(img_data, tf.float32)

    adjusted = tf.image.adjust_hue(image_float, 0.1)
    #adjusted = tf.image.adjust_hue(image_float, 0.3)
    #adjusted = tf.image.adjust_hue(image_float, 0.6)
    #adjusted = tf.image.adjust_hue(image_float, 0.9)

    # 在[-max_delta, max_delta]的范围随机调整图片的色相。max_delta的取值在[0, 0.5]之间。
    #adjusted = tf.image.random_hue(image_float, max_delta)

    # 将图片的饱和度-5。
    #adjusted = tf.image.adjust_saturation(image_float, -5)
    # 将图片的饱和度+5。
    #adjusted = tf.image.adjust_saturation(image_float, 5)
    # 在[lower, upper]的范围随机调整图的饱和度。
    #adjusted = tf.image.random_saturation(image_float, lower, upper)

    # 将代表一张图片的三维矩阵中的数字均值变为0,方差变为1。
    #adjusted = tf.image.per_image_whitening(image_float)

    # 在最终输出前,将实数取值截取到0-1范围内。
    adjusted = tf.clip_by_value(adjusted, 0.0, 1.0)
    plt.imshow(adjusted.eval())
    plt.show()

image.png

6、对图片增加标注框

# 在图片中添加标注框,和裁剪
with tf.Session() as sess8:
    # 生成标准框
    # 设置标注框的位置
    boxes = tf.constant([[[0.05, 0.05, 0.9, 0.7], [0.35, 0.47, 0.5, 0.56]]])

    # 图片太大,标注框无法显示,所以将图片变小
    image_small = tf.image.resize_images(image_float, [180, 267], method=0)
    # 对数据进行扩充,将其变为4维矩阵
    batchced_img = tf.expand_dims(image_small, 0)
    # draw_bounding_boxes处理多张图片,所以是一个四维矩阵,需要对原图像进行扩充
    image_with_box = tf.image.draw_bounding_boxes(batchced_img, boxes)

    plt.imshow(image_with_box[0].eval())
    plt.show()

    # 对原图进行随机裁剪,但是至少覆盖标注框boxes,40%的内容
    begin, size, bbox_for_draw = tf.image.sample_distorted_bounding_box(
        tf.shape(image_float), bounding_boxes=boxes, min_object_covered=0.4
    )
    print(begin)
    print(size)
    distorted_image = tf.slice(image_float, begin, size)
    plt.imshow(image_with_box[0].eval())
    plt.show()

image.png

2017-04-20 13:56:22 chaipp0607 阅读数 10575
  • 大数据—Scala

    一、Scala核心编程课程简介 近年来随着大数据的兴起,大数据核心框架Spark和Kafka也受到到广泛关注, Spark底层是Scala实现的, 因此也带火了Scala语言,目前Scala被全球知名公司(如:谷歌、百度、阿里、Twitter、京东等)广泛用于Spark开发。新一代的物联网时代到来,会对大数据应用人才的需求越加紧迫。 尚硅谷网罗和整合了学员很喜爱的师资,打造出专注于Spark开发的Scala课程,我们讲解Scala核心编程技术,同时也讲解编程思想、设计模式和Scala底层实现,让您有豁然开朗的感受。 二、课程内容和目标 本课程重点讲解Scala核心编程,内容包括: Scala语言概述、运算符、程序流程控制、数据结构之集合、Map映射、过滤、化简、折叠、扫描、拉链、视图、并行集合、高阶函数、函数柯里化、偏函数、参数推断、控制抽象、Trait、面向对象编程、异常处理、惰性函数、Akka及Actor模型、Spark Master和Worker通讯、隐式转换、隐式参数、工厂模式、单例模式、观察者模式、装饰者模式、代理模式、泛型、上下界、视图界定、上下文界定、协变逆变不变和源码剖析。通过系统全面的学习,学员能掌握Scala编程思想和Scala底层机制,为进一步学习Spark打下坚实基础。 三、谁适合学 1.希望以较低的投入和风险,来了解自己是否适合转型从事Spark开发的求职人员。 2.有一定的Java基础,或者自学过一些Java书籍与视频资料,想系统掌握Scala语言的程序员。

    2893 人正在学习 去看看 缪传海

图像的hu矩是一种具有平移、旋转和尺度不变性的图像特征。

普通矩的计算:
f(x,y)的p+q阶原点矩可以表示为:
这里写图片描述

而数字图像是一个二维的离散信号,对上述公式进行离散化之后:
这里写图片描述
其中C与R分别表示图像的列与行。

各阶矩的物理意义:
0阶矩(m00):目标区域的质量
1阶矩(m01,m10):目标区域的质心
2阶矩(m02,m11,m20):目标区域的旋转半径
3阶矩(m03,m12,m21,m30):目标区域的方位和斜度,反应目标的扭曲

但是目标区域往往伴随着空间变换(平移,尺度,旋转),所以需要在普通矩的基础上构造出具备不变性的矩组—hu矩。

中心矩:构造平移不变性
由零阶原点矩和一阶原点矩,我们可以求得目标区域的质心坐标:
这里写图片描述
由求得的质心坐标,我们可以构造出中心矩:

这里写图片描述

由于我们选择了以目标区域的质心为中心构建中心矩,那么矩的计算时永远是目标区域中的点相对于目标区域的质心,而与目标区域的位置无关,及具备了平移不变性。

归一化中心矩:构造尺度不变性

为抵消尺度变化对中心矩的影响,利用零阶中心矩u00对各阶中心距进行归一化处理,得到归一化中心矩:

这里写图片描述

由上文可知,零阶矩表示目标区域的质量(面积),那么如果目标区域的尺度发生变化(缩小2倍),显然其零阶中心矩也会相应变小,使得矩具备尺度不变性。

hu矩:构造旋转不变性
利用二阶和三阶规格中心矩可以导出下面7个不变矩组(Φ1 Φ7),它们在图像平移、旋转和比例变化时保持不变。
这里写图片描述

2019-02-27 17:55:17 BeforeSunriseSilvia 阅读数 1786
  • 大数据—Scala

    一、Scala核心编程课程简介 近年来随着大数据的兴起,大数据核心框架Spark和Kafka也受到到广泛关注, Spark底层是Scala实现的, 因此也带火了Scala语言,目前Scala被全球知名公司(如:谷歌、百度、阿里、Twitter、京东等)广泛用于Spark开发。新一代的物联网时代到来,会对大数据应用人才的需求越加紧迫。 尚硅谷网罗和整合了学员很喜爱的师资,打造出专注于Spark开发的Scala课程,我们讲解Scala核心编程技术,同时也讲解编程思想、设计模式和Scala底层实现,让您有豁然开朗的感受。 二、课程内容和目标 本课程重点讲解Scala核心编程,内容包括: Scala语言概述、运算符、程序流程控制、数据结构之集合、Map映射、过滤、化简、折叠、扫描、拉链、视图、并行集合、高阶函数、函数柯里化、偏函数、参数推断、控制抽象、Trait、面向对象编程、异常处理、惰性函数、Akka及Actor模型、Spark Master和Worker通讯、隐式转换、隐式参数、工厂模式、单例模式、观察者模式、装饰者模式、代理模式、泛型、上下界、视图界定、上下文界定、协变逆变不变和源码剖析。通过系统全面的学习,学员能掌握Scala编程思想和Scala底层机制,为进一步学习Spark打下坚实基础。 三、谁适合学 1.希望以较低的投入和风险,来了解自己是否适合转型从事Spark开发的求职人员。 2.有一定的Java基础,或者自学过一些Java书籍与视频资料,想系统掌握Scala语言的程序员。

    2893 人正在学习 去看看 缪传海

        在灰度图像--频域滤波 傅里叶变换之二维离散傅里叶变换里边看到二维傅里叶具有旋转特性,

        具体应该如何证明呢?我用MATLAB跑了一下图片(如下图所示),为什么第二张图片的傅里叶变化是这样的呢?
        1)45°

傅里叶变换45°

        2)30°

傅里叶变换30°

/////////////////////////////////////////2019/6/27/////////////////////////////////////////

        经过一段时间的挣扎后,我终于证出来了。

        首先,上图2中傅里叶变换后的频谱变成那样,是因为图片旋转时会进行插值,信号本身会被改变,因此图片旋转一定角度时,对应的二维离散傅里叶变换会发生改变。以下证明是对二维连续傅里叶进行证明,公式如下:

方法一:利用旋转公式

        参考文献Some Properties of Fourier Transform

        1)连续二维傅里叶变换为

        当顺时针旋转 时,

        则

        2)令 为旋转后的图像,则傅里叶变换

        从上式可以得知, 是将 顺时针旋转 ,因此求出二维傅里叶的旋转变换。

方法二:利用旋转矩阵

        参考文献Rotation and the Fourier Transform

        1)连续二维傅里叶变换为

        令 ,且 ,则

        2)当顺时针旋转 时,

        为正交矩阵,

        则

        3)令 为旋转后的图像。

        从上式可以得知,二维傅里叶旋转不变。

 

 

2015-02-01 20:56:46 u011484045 阅读数 2222
  • 大数据—Scala

    一、Scala核心编程课程简介 近年来随着大数据的兴起,大数据核心框架Spark和Kafka也受到到广泛关注, Spark底层是Scala实现的, 因此也带火了Scala语言,目前Scala被全球知名公司(如:谷歌、百度、阿里、Twitter、京东等)广泛用于Spark开发。新一代的物联网时代到来,会对大数据应用人才的需求越加紧迫。 尚硅谷网罗和整合了学员很喜爱的师资,打造出专注于Spark开发的Scala课程,我们讲解Scala核心编程技术,同时也讲解编程思想、设计模式和Scala底层实现,让您有豁然开朗的感受。 二、课程内容和目标 本课程重点讲解Scala核心编程,内容包括: Scala语言概述、运算符、程序流程控制、数据结构之集合、Map映射、过滤、化简、折叠、扫描、拉链、视图、并行集合、高阶函数、函数柯里化、偏函数、参数推断、控制抽象、Trait、面向对象编程、异常处理、惰性函数、Akka及Actor模型、Spark Master和Worker通讯、隐式转换、隐式参数、工厂模式、单例模式、观察者模式、装饰者模式、代理模式、泛型、上下界、视图界定、上下文界定、协变逆变不变和源码剖析。通过系统全面的学习,学员能掌握Scala编程思想和Scala底层机制,为进一步学习Spark打下坚实基础。 三、谁适合学 1.希望以较低的投入和风险,来了解自己是否适合转型从事Spark开发的求职人员。 2.有一定的Java基础,或者自学过一些Java书籍与视频资料,想系统掌握Scala语言的程序员。

    2893 人正在学习 去看看 缪传海
lbp特征
LBPLocal Binary Pattern,局部二值模式)是一种用来描述图像局部纹理特征的算子;它具有旋转不变性和灰度不变性等显著的优点。它是首先由T. Ojala, M.Pietikäinen, D. Harwood 1994年提出,用于纹理特征提取。而且,提取的特征是图像的局部的纹理特征。
下面介绍lbp特征的三种基本模式,图像处理中对于提取lbp特征也不外乎这三种模式,下面一一说明。
一、等价模式(Uniform Pattern)
  为了解决二进制模式过多的问题,提高统计性,Ojala提出了采用一种“等价模式”(Uniform Pattern)来对LBP算子的模式种类进行降维。Ojala等认为,在实际图像中,绝大多数LBP模式最多只包含两次从10或从01的跳变。因此,Ojala将“等价模式”定义为:当某个LBP所对应的循环二进制数从01或从10最多有两次跳变时,该LBP所对应的二进制就称为一个等价模式类。000000000次跳变),00000111(只含一次从01的跳变),10001111(先由1跳到0,再由0跳到1,共两次跳变)都是等价模式类。除等价模式类以外的模式都归为另一类,称为混合模式类,例如10010111(共四次跳变)。这种模式下,lbp特征的种类个数为(即bin的数目)samples*(samples-1) + 3,这里的samples指的是邻域个数。这里的循环二进制数从01或从10最多有两次跳变时,每一个二进制数代表一个bin。如00000001(一次跳变)、10000000(一次跳变),但是这两个属于不同的bin。此外,对于循环二进制数从01或从10超过两次跳变的,都属于同一个bin
二、旋转不变模式
对于邻域点数为n,所以循环二进制数有n位,对n位二进制数循依次循环左移n - 1位,取其中最小的值存取。依次对选取的最小值给一个索引值,索引值从0开始。这段的matlab代码如下:
if strcmp(mappingtype,'ri') %Rotation invariant lbp的一种类型 旋转不变的
  tmpMap = zeros(2^samples,1) - 1;
  for i = 0:2^samples-1
    rm = i;
    r  = i;
    for j = 1:samples-1
      r = bitset(bitshift(r,1,samples),1,bitget(r,samples)); %rotate left
                                                             
      if r < rm
        rm = r;
      end
    end
    if tmpMap(rm+1) < 0
      tmpMap(rm+1) = newMax;%newMax初始值为0,newMax指的是number of patterns in the resulting LBP code
      newMax = newMax + 1;
    end
    table(i+1) = tmpMap(rm+1);%table为1*256向量  每种二进制的值经过循环左移后取最小值对应的index
  end
  
end
三、等价模式&旋转不变模式
两者结合情况下,lbp特征的种类个数为samples + 2(samples为邻域点数),两者结合是个什么情况呢,下面直接用代码解释吧
if strcmp(mappingtype,'riu2') %Uniform & Rotation invariant
  newMax = samples + 2;
  for i = 0:2^samples - 1
    j = bitset(bitshift(i,1,samples),1,bitget(i,samples)); %rotate left
    numt = sum(bitget(bitxor(i,j),1:samples));
    if numt <= 2
      table(i+1) = sum(bitget(i,1:samples));%table为1*256向量 第一个元素代表0,依次下去 其中的值是类型的index这里面有10种
    else
      table(i+1) = samples+1;
    end
  end
end





没有更多推荐了,返回首页