数字图像处理——图像的几何变换

     这次学习图像的几何变换,主要有以下内容:

      ·图像的平移变换

      ·图像的镜像变换

      ·图像的转置变换

      ·图像的旋转变换

      ·图像的缩放

 

1、图像的平移变换

  在进行书写matlab代码之前,先来了解一下图像平移的理论基础。设图像的高度为H宽度为W,如下所示:

                          

我们知道,图像是由像素组成的,而像素的集合就相当于一个二维的矩阵,每一个像素都有一个“位置”,也就是像素都有一个坐标。假设原来的像素的位置坐标为(x0,y0),经过平移量(△x,△y)后,坐标变为(x1,y1),如下所示:

                     

用数学式子表示可以表示为:

              x1 = x0 + x,

              y1 = y0 + y

用矩阵表示为:

                  

本来使用二维矩阵就可以了的,但是为了适应像素、拓展适应性,这里使用三位的向量。

式子中,矩阵:

                

称为平移变换矩阵(因子),△x和△y为平移量。

此外,我们也知道了,图像的高度H其实也就是像素的行数,对于坐标1XH;图像的长度也就是像素的列数,对应坐标1YW

  上面是理论基础,下面我们就用matlab实现一下图像的平移变换,相应的matlab代码如下所示:

close all ;


clear all ;


clc ;


im = imread('F:/图像处理/Koala.jpg');%读入一幅图


[H,W,Z] = size(im); % 获取图像大小,H为垂直方向768点,W为水平方向1024点


I=im2double(im);%将图像类型转换成双精度


res = ones(H,W,Z); % 构造结果矩阵。每个像素点默认初始化为1(白色)


delX = 50; % 平移量X


delY = 100; % 平移量Y


tras = [1 0 delX; 0 1 delY; 0 0 1]; % 平移的变换矩阵


 


for x0 = 1 : H%第1行到第768行


    for y0 = 1 : W%第1列到第1024列


        temp = [x0; y0; 1];%将每一点的位置进行缓存,1行1列,1行2列···1行1024列


        temp = tras * temp; % 根据算法进行,矩阵乘法:转换矩阵乘以原像素位置


        x1 = temp(1, 1);%新的像素x1位置,也就是新的行位置(从1~768)


        y1 = temp(2, 1);%新的像素y1位置,也就是新的列位置(从1~1024)


        % 变换后的位置判断是否越界


        if (x1 <= H) & (y1 <= W) & (x1 >= 1) & (y1 >= 1)%新的行位置要小于新的列位置


            res(x1,y1,:)= I(x0,y0,:);%进行图像平移,颜色赋值


        end


    end


end;


 


set(0,'defaultFigurePosition',[100,100,1000,500]);%设置窗口大小


set(0,'defaultFigureColor',[1 1 1]);%设置窗口颜色


figure;%打开一个窗口,用来显示(多幅)图像


subplot(1,2,1), imshow(I),axis on ;%显示图片,一行两列,第一幅


subplot(1,2,2), imshow(res),axis on;%显示图片,一行两列,第二幅

我们先来看一下效果,然后着重分析一下代码,效果如下所示:

 

然后下面我们分析一下关键的代码:

  读入图像之后,得到im,我们可以看到im是一个三维的变量,包括了像素的位置(高度(即垂直长度)和宽度(即水平长度)),像素的颜色。(注,24位真彩图:也是用矩阵表示,图像像素直接用RGB颜色显示,而不是通过颜色索引表。图像像素的颜色用三个变量表示即(R,G,B),每个变量从0~255变化,因此一个像素也就是8bit*3=24bit,一个像素用24bit表示可以有2^24种颜色。)我们可以看到会有unit8,就是8bit的原因。

  然后我们获取图像的大小,用H,W,Z三个变量接收,其中H接收了图片的高度(也就是垂直长度),W接收了图片的宽度(水平长度),然后Z接收了图片的颜色值

  然后我们将图像转换成双精度类型I,这是因为使用双精度可以仿真在转换过程中发生精度损失的问题,也是方便我们进行转换。转换之后,我们可以看到unit8的类型别我们转换成了double类型。

  接着,我们构造一个图像res矩阵,这个图像首先进行归一化,也就是让里面的元素全部为1,对于图像,就是一张白色的图片了。这个图像主要是用来“保存”我们进行位移后的图像。

  然后我们就设置平移量、构造平移变换矩阵。这个矩阵我们根据前面的理论部分可以得到。

  接着便是重点了,进行平移变换。我们来一句一句解读这个循环。当x0=1,y0=1时,得到第一个像素的位置,也就是(x0,y0)这个像素,然后将这个像素位置进行缓存,也就是构造一个矩阵temp,即理论中的:

                      

然后进行位置转换,也就是进行矩阵相乘,用变换矩阵乘以原像素矩阵,得到了变换后像素矩阵:

                       

  接着,我们需要把变换后的像素位置“提取”出来,用x1y1进行存储;为什么要获取位置呢?这是因为我们要判断这个像素是否越界了,也就是进行平移之后,得到的这个像素位置是否还存在显示区域里面,也就是我们的

        if (x <= H) & (y <= W) & (x >= 1) & (y >= 1) 语句

当还在显示区域里面时,我们要进行移位显示:

            res(x1,y1,:)= I(x0,y0,:);%进行图像平移,颜色赋值

这个语句的含义是,把I中的RGB值(也就是颜色值)赋值给res,也就是说,前面矩阵相乘只是移动的像素位置,但是颜色没有进行移动,这里进行图像颜色的平移,当x0=1,y0=1时,把该点的位置图像颜色进行移动过去。

  当x0=1,y0=2时,移动第二点。我们可以看到,这里的代码是:从左到右平移,也就是先进行宽度的平移;从上到下,进行高度的平移。当两个循环完成之后,图像也就像平移完成了。

  最后的代码就是显示图像了,其中axis on 的意思是打开左边,方便我们进行查看平移后的位置。从上面的效果我们可以得到,delx表示的高度的平移量,delx为正值时往下平移,delx为负值时往上平移;而dely表示的宽度的平移量,正值往右平移,负值往左平移。

 

 

2、图像的镜像变换

  图像的镜像变换分为水平镜像垂直镜像,下面分别进行这两种镜像的介绍,首先说明一下,无论是水平镜像还是垂直镜像,镜像后高度和宽度都不变。

                        

              H图像的高度,关联x          W:图像的宽度,关联y

  ·水平镜像操作:以原图像的垂直中轴线为中心,将图像分为左右两部分进行对称变换。示意图如下所示:

                   

  水平镜像中,原图中的(x0,y0)经过水平镜像后,坐标变成了(x0,W-y0),用数学公式表达就是:

          x1 = x0,

          y1 = W-y0 ;

写成矩阵就是:

                    

也就是说,水平镜像变换矩阵(因子)为:

                          

matlab代码实现如下所示:

 

复制代码
close all ;
clear all ;
clc ;
im = imread('F:/图像处理/Koala.jpg');%读入一幅图
[H,W,Z] = size(im); % 获取图像大小,H为垂直方向768点,W为水平方向1024点
I=im2double(im);%将图像类型转换成双精度
res = ones(H,W,Z); % 构造结果矩阵。每个像素点默认初始化为1(白色)
tras = [1 0 0; 0 -1 W; 0 0 1]; % 水平镜像的变换矩阵 
for x0 = 1 : H%第1行到第768行for y0 = 1 : W%第1列到第1024列temp = [x0; y0; 1];%将每一点的位置进行缓存,1行1列,1行2列···1行1024列temp = tras * temp; % 根据算法进行,矩阵乘法:转换矩阵乘以原像素位置x1 = temp(1, 1);%新的像素x1位置,也就是新的行位置(从1~768)y1 = temp(2, 1);%新的像素y1位置,也就是新的列位置(从1~1024% 变换后的位置判断是否越界if (x1 <= H) & (y1 <= W) & (x1 >= 1) & (y1 >= 1)%新的行位置要小于新的列位置res(x1,y1,:)= I(x0,y0,:);%进行图像颜色赋值endend
end;
set(0,'defaultFigurePosition',[100,100,1000,500]);%设置窗口大小
set(0,'defaultFigureColor',[1 1 1]);%设置窗口颜色
figure;%打开一个窗口,用来显示(多幅)图像
subplot(1,2,1), imshow(I),axis on ;%显示图片,一行两列,第一幅
subplot(1,2,2), imshow(res),axis on;%显示图片,一行两列,第二幅
复制代码

代码已经没有什么好介绍的了,跟前面的平移差不多,只不过变换矩阵水平镜像变化矩阵,得到的效果如下所示:

 

  ·垂直镜像操作:以原图像的水平中轴线为中心,将图像分为上下两部分进行对称变换。示意图如下所示:

             

  垂直镜像中,原图中的(x0,y0)经过垂直镜像后,坐标变成了(H-x0,y0),用数学公式表达就是:

        x1 = H - x0,

        y1 = y0 ;

写成矩阵就是:

                    

也就是说,垂直镜像变换矩阵(因子)为:

                        

matlab代码实现如下所示:

复制代码
close all ;clear all ;clc ;im = imread('F:/图像处理/Koala.jpg');%读入一幅图[H,W,Z] = size(im); % 获取图像大小,H为垂直方向768点,W为水平方向1024点I=im2double(im);%将图像类型转换成双精度res = ones(H,W,Z); % 构造结果矩阵。每个像素点默认初始化为1(白色)tras = [-1 0 H; 0 1 0; 0 0 1]; % 垂直镜像的变换矩阵for x0 = 1 : H%第1行到第768行for y0 = 1 : W%第1列到第1024列temp = [x0; y0; 1];%将每一点的位置进行缓存,1行1列,1行2列···1行1024列temp = tras * temp; % 根据算法进行,矩阵乘法:转换矩阵乘以原像素位置x1 = temp(1, 1);%新的像素x1位置,也就是新的行位置(从1~768)y1 = temp(2, 1);%新的像素y1位置,也就是新的列位置(从1~1024% 变换后的位置判断是否越界if (x1 <= H) & (y1 <= W) & (x1 >= 1) & (y1 >= 1)%新的行位置要小于新的列位置res(x1,y1,:)= I(x0,y0,:);%进行颜色赋值endendend;set(0,'defaultFigurePosition',[100,100,1000,500]);%设置窗口大小set(0,'defaultFigureColor',[1 1 1]);%设置窗口颜色figure;%打开一个窗口,用来显示(多幅)图像subplot(1,2,1), imshow(I),axis on ;%显示图片,一行两列,第一幅subplot(1,2,2), imshow(res),axis on;%显示图片,一行两列,第二幅
复制代码

 

代码实现的效果如下所示:

 

 

 

3、图像的转置变换

  图像的转置就是将图像像素的x坐标和y坐标互换。这样将改变图像的高度和宽度,转置后图像的高度和宽度也将互换。

图像的转置用数学公式描述就是:

            x1 = y0,

                            y1 = x0;

写出矩阵如下所示:

         

matlab实现的代码如下所示:

复制代码
close all ;clear all ;clc ;im = imread('F:/图像处理/Koala.jpg');%读入一幅图[H,W,Z] = size(im); % 获取图像大小,H为垂直方向768点,W为水平方向1024点I=im2double(im);%将图像类型转换成双精度res = ones(H,W,Z); % 构造结果矩阵。每个像素点默认初始化为1(白色)tras = [0 1 0; 1 0 0; 0 0 1]; % 转置的变换矩阵for x0 = 1 : H%第1行到第768行for y0 = 1 : W%第1列到第1024列temp = [x0; y0; 1];%将每一点的位置进行缓存,1行1列,1行2列···1行1024列temp = tras * temp; % 根据算法进行,矩阵乘法:转换矩阵乘以原像素位置x1 = temp(1, 1);%新的像素x1位置,也就是新的行位置(从1~768)y1 = temp(2, 1);%新的像素y1位置,也就是新的列位置(从1~1024% 变换后的位置判断是否越界if (x1 <= H) & (y1 <= W) & (x1 >= 1) & (y1 >= 1)%新的行位置要小于新的列位置res(x1,y1,:)= I(x0,y0,:);%进行图像颜色赋值endendend;set(0,'defaultFigurePosition',[100,100,1000,500]);%设置窗口大小set(0,'defaultFigureColor',[1 1 1]);%设置窗口颜色figure;%打开一个窗口,用来显示(多幅)图像subplot(1,2,1), imshow(I),axis on ;%显示图片,一行两列,第一幅subplot(1,2,2), imshow(res),axis on;%显示图片,一行两列,第二幅
复制代码

 

实现的效果如下所示:

 

 

 

4、图像的旋转

  一般情况下,旋转操作会有一个旋转中心,这个旋转中心一般为图像的中心,旋转之后图像的大小一般会发生改变。图像像素原来的坐标为(x0,y0),(顺时针)选择Θ角度后得到(x1,y1),用数学公式表达如下所示:

             x1 = x0·cosΘ + y0·sinΘ,

             y1 = -x0·sinΘ + y0·cosΘ;

用矩阵表示如下所示:

     

 

matlab中有直接实现图像旋转的函数,整理我们就直接使用图像的旋转函数,代码如下所示:

复制代码
close all ;clear all ;clc ;im = imread('F:/图像处理/Koala.jpg');%读入一幅图res = imrotate(im,-30);set(0,'defaultFigurePosition',[100,100,1000,500]);%设置窗口大小set(0,'defaultFigureColor',[1 1 1]);%设置窗口颜色figure;%打开一个窗口,用来显示(多幅)图像subplot(1,2,1), imshow(im),axis on ;%显示图片,一行两列,第一幅subplot(1,2,2), imshow(res),axis on;%显示图片,一行两列,第二幅
复制代码

这里主要是说明一下imrotate函数,这个函数就是对图像旋转的函数,输入是图像和旋转的角度,角度为正值时,逆时针旋转;角度为负值时,顺时针选择。代码实现的效果如下所示:

 

 

 

5、图像的缩放

  下面值来介绍一下图像的缩放主要是根据函数imresize来实现的,我们先来看看代码和效果图,然后分析图像的缩放函数。代码和效果图像所示:

复制代码
close all ;clear all ;clc ;[im,map] = imread('Hydrangeas.bmp');%读入图片im0 = imresize(im,0.26);%进行缩放到原来的0.26倍im1 = imresize(im,1);%缩放原来的比例im2 = imresize(im,3.5);%进行缩放到原来的3.5倍im3 = imresize(im,[64 40]);%进行图像的缩放并设置图像的行列im4 = imresize(im,1.6,'bilinear');%进行线性插值实现缩放im5 = imresize(im,1.6,'triangle');set(0,'defaultFigurePosition',[100,100,1000,500]);%设置窗口大小set(0,'defaultFigureColor',[1 1 1]);%设置窗口颜色figure;%打开一个窗口,用来显示(多幅)图像subplot(1,2,1), imshow(im,map);%显示图片,一行两列,第一幅subplot(1,2,2), imshow(im0,map);%显示图片,一行两列,第二幅figure;%打开一个窗口,用来显示(多幅)图像subplot(1,2,1), imshow(im,map);%显示图片,一行两列,第一幅subplot(1,2,2), imshow(im1,map);%显示图片,一行两列,第二幅figure;%打开一个窗口,用来显示(多幅)图像subplot(1,2,1), imshow(im,map);%显示图片,一行两列,第一幅subplot(1,2,2), imshow(im2,map);%显示图片,一行两列,第二幅figure;%打开一个窗口,用来显示(多幅)图像subplot(1,2,1), imshow(im,map);%显示图片,一行两列,第一幅subplot(1,2,2), imshow(im3,map);%显示图片,一行两列,第二幅figure;%打开一个窗口,用来显示(多幅)图像subplot(1,2,1), imshow(im,map);%显示图片,一行两列,第一幅subplot(1,2,2), imshow(im4,map);%显示图片,一行两列,第二幅figure;%打开一个窗口,用来显示(多幅)图像subplot(1,2,1), imshow(im,map);%显示图片,一行两列,第一幅subplot(1,2,2), imshow(im5,map);%显示图片,一行两列,第二幅
复制代码

 

缩小:

 

 

等大:

 

 

放大:

 

 

缩放并且设置行列:

 

 

线性插值:

 

下面介绍一下imresize函数的使用信息(可以通过在matlab 使用help imresize查看):

该函数主要用来调整图像大小。

     B = imresizeASCALE返回一个图像,大小是原来的SCALE倍;A是灰度、RGB或者二进制图像。   

     B = imresizeA[NUMROWS  NUMCOLS]调整图像大小,使其具有指定数量的行和列。 NUMROWSNUMCOLS可能都是NaN,在这种情况下,将自动计算行数或列数,以便保留图像宽高比。   

    [YNEWMAP] = imresizeXMAPSCALE调整索引图像的大小,其中按照SCALE的倍数对原图像进行调整。   

    [YNEWMAP] = imresizeXMAP[NUMROWS NUMCOLS]调整索引图像的大小,通过调整行数和列数进行调整。   

    要控制imresize使用的插值方法,可以在上面的语法中添加一个METHOD参数,如下所示: 

        ASCALEMETHOD

        A[NUMROWS NUMCOLS]METHOD),

        imresizeXMAPMMETHOD

        imresizeXMAP[NUMROWS NUMCOLS]METHOD 

METHOD可以是一个命名一般插值方法的字符串:

        'nearest'  - 最近邻插值

          'bilinear'  - 双线性插值

          'bicubic'  - 三次插值;默认方法 

METHOD也可以是一个命名插值内核的字符串:

        'box'  用盒形内核插值 

        'triangle'  - 三角形内核插值  (相当于“双线性”) 

        'cubic' - 用立方核插值   (相当于“bicubic”)   

        'lanczos2' - Lanczos-2内核插值   

        'lanczos3' - 插入Lanczos-3内核 

    最后,METHOD可以是{fw}形式的双元素单元阵列,其中f是自定义内插内核的处理函数,w是自定义内核的宽度。在区间-w / 2 <= x <w / 2之外,fx)必须为零。可以使用标量或向量输入来调用处理函数f

    可以通过使用上述任何语法之后的参数/值对来实现对imresize的附加控制。例如: 

        B = imresizeASCALEPARAM1VALUE1PARAM2VALUE2... 

参数包括:   

        'Antialiasing'真假指定缩小图像时是否执行抗锯齿。默认值取决于您选择的插值方法。对于'nearest' METHOD参数,默认值为false;对于所有其他方法,默认值为true 

        'Colormap' - (仅与索引图像相关) 'original' 或 'optimized';如果'original' ,则输出newmap与输入图相同。如果是“优化”,则会创建一个新的优化颜色映射。默认值为“optimized”。 

        'Dither' - (仅适用于索引图像)truefalse;  指定是否执行颜色抖动。默认值为true   

       'Method'  - 如上所述   

        'OutputSize' - 一个双元素向量[MROWS NCOLS] 指定输出大小。一个元素可以是NaN,在这种情况下,自动计算另一个值以保留图像的宽高比。   

        'Scale' - 一个标量或两元素向量,指定调整大小的比例因子。如果它是标量,则将相同的比例因子应用于每个维度。如果它是向量,它分别包含行和列尺寸的比例因子。 

例子:

    --------

使用默认的双三次插值和抗混叠缩小两倍:

        I = imread'rice.png';

        J = imresizeI0.5;

         figureimshowI), figureimshowJ

 使用最近邻内插收缩因子2    (这是最快的方法,但质量最差): 

        J2 = imresizeI0.5'nearest';

调整索引图像的大小: 

        [Xmap] = imread'trees.tif';

        [Ynewmap] = imresizeXmap0.5;

        imshowYnewmap

调整RGB图像的大小以获得64行,自动计算列数:

RGB = imread'peppers.png';

        RGB2 = imresizeRGB[64 NaN];

 

图像的几何变化差不多就到这里了,matlab中有很多函数可以实现图像的几何变换,这里就不详细说明了。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/492367.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

万字长文解读运营商搏击5G:一场比拼财力的三国杀

来源&#xff1a;财经无忌摘要&#xff1a;5G时代已经来临&#xff0c;5G走向商用的步伐也在逐渐加快。近日&#xff0c;腾讯科技联合优质科技媒体推出“5G局中局”系列文章&#xff0c;为你解读5G在通讯、物联网、车联网、工业联网、边缘计算、云服务等各行业的应用&#xff0…

MVP

MVP是一种广泛使用的UI架构模式&#xff0c;适用于基于事件驱动的应用框架。 能够与 Model直接进行交互的仅限于 Presenter, View 只能通过 Presenter 间拉地调用 Model。 MVP分PV&#xff08;Passive View) 和 &#xff08;Supervising Controller)两种模式 SC(Supervising Co…

OpenCV——图像显示与写入

1、图像显示与写入的代码如下&#xff1a; #include<opencv2/core/core.hpp> #include<opencv2/highgui/highgui.hpp>using namespace cv; using namespace std; //opencv中图像显示与写入 int main() {Mat myMat imread("小狗1.jpg", -1);if (myMat.em…

工业3D打印:一场仍处在初级阶段的技术革命

来源&#xff1a;资本实验室摘要&#xff1a;曾记否&#xff0c;几年前当我们在实体店看到3D打印机打印出的一个个小玩意时&#xff0c;那种油然而生的新鲜与神奇感&#xff1f;然而&#xff0c;短短几年&#xff0c;面对这种新事物&#xff0c;我们已经见怪不怪。此外&#xf…

OpenCV——读取视频文件并写入文件

1、代码如下&#xff1a; #include<opencv2/opencv.hpp> using namespace cv;//-----------------------------------【main()函数】-------------------------------------------- // 描述&#xff1a;控制台应用程序的入口函数&#xff0c;我们…

人工智能的现状与未来(附PPT)

来源&#xff1a;网经科技摘要&#xff1a;人工智能引领新的工业革命&#xff0c;需要正确理解其技术核心、学科定位、架构演进&#xff0c;当前深度学习和知识图谱成其左膀右臂&#xff0c;象征人类智谋的智能博弈在围棋后的下一个高地在哪里&#xff1f;走向人机融合的未来&a…

【最新】三位深度学习创始人共同获得了2019年公布的图灵奖

来源&#xff1a;biendata数据实战派2019年3月27日 ——ACM宣布&#xff0c;深度学习的三位创造者Yoshua Bengio, Yann LeCun, 以及Geoffrey Hinton获得了2019年的图灵奖。今天&#xff0c;深度学习已经成为了人工智能技术领域最重要的技术之一。在最近数年中&#xff0c;计算机…

Throwable 结构图

从这个图中就可以看出运行时异常是数组越界、空指针、类转换错误之类的异常&#xff0c;解决方法是修改代码而其他异常&#xff0c;也就是已检查异常&#xff0c;则是需要抛出或者捕捉转载于:https://www.cnblogs.com/dolphin007/p/4446105.html

无人驾驶产业发展现状及影响

来源&#xff1a;《中国国情国力》杂志摘要&#xff1a;无人驾驶产业将是我国对美欧日等传统汽车大国实现变道超车的重要领域。我国无人驾驶产业需求巨大、规模快速增长&#xff0c;但是人才缺口和尚不完善的法律仍是制约产业发展的障碍。无人驾驶产业改变了就业结构&#xff0…

Java中9种IO的读取方式

数据的读写&#xff0c;按照数据类型可以分为两种&#xff1a;字符流和字节流&#xff08;二者区别&#xff1f;&#xff09;。所以数据读取方式按照数据类型也可以分为两类&#xff1a;字节流的读取和字符流的读取。 一、字节流读取操作&#xff1a;| ||-----1、FileInputStre…

推翻《Nature》:生命不息,神经发生不止...

摘要&#xff1a;热播剧《都挺好》里的巨婴苏大强最后也患了阿尔兹海默症来源&#xff1a;中国生物技术网上图显示了68岁时死亡的男性海马齿状回的组织。他在死亡时有一个健康的大脑。在图片中&#xff0c;新鲜的脑细胞呈红色&#xff0c;成熟的脑细胞呈蓝色。图片来源&#xf…

OpenCV—基本矩阵操作与示例

OpenCV的基本矩阵操作与示例OpenCV中的矩阵操作非常重要&#xff0c;本文总结了矩阵的创建、初始化以及基本矩阵操作&#xff0c;给出了示例代码&#xff0c;主要内容包括&#xff1a;创建与初始化矩阵加减法矩阵乘法矩阵转置矩阵求逆矩阵非零元素个数矩阵均值与标准差矩阵全局…

人工智能的三大教父,谱写了一段关于勇气的寓言

来源&#xff1a;原理上世纪80年代末&#xff0c;还在加拿大攻读硕的尤舒亚本吉奥&#xff08;Yoshua Bengio&#xff09;被一个当时并不怎么流行的想法迷住了。那时&#xff0c;有少数从事人工智能研究的计算机科学家试图研发这样一种软件&#xff0c;这种软件可以大致模仿神经…

OpenCV——绘制基本图形

1、代码如下&#xff1a; #include<opencv2/core/core.hpp> #include<opencv2/highgui/highgui.hpp> #include<opencv2/imgproc/imgproc.hpp>using namespace cv;int main() {Size size(800,800);Size size2(300, 200);Mat img Mat::zeros(size, CV_8UC3);P…

动图|几张动图告诉你,工业机器人无所不能!

来源&#xff1a;机电微学堂1.最常见的汽车生产线车间 ☟2.准确抓住手机边缘 ☟3.装配机械手 ☟4.写毛笔字 ☟5.机器人参与上下料 ☟6.把次品投出 ☟7.喷涂机器人 ☟8.六轴机械手 ☟9.抓取机械手 ☟10.切香肠 ☟11.焊接 ☟12.点焊 ☟13.码垛机械手 ☟14.检测 ☟15.打台球 ☟16.…

银联在线支付---利用测试案例代码模拟支付应用(修改)

一、工程搭建 新建一个Web工程&#xff0c;命名为PayOnLine&#xff0c;把你下载好的案例代码拷贝到你的工程下&#xff0c;我的代码目录如下&#xff1a;acp_sdk.properties配置文件需要放在类根路劲下&#xff0c;里面的参数配置信息&#xff0c;下面是案例提供的配置提示&am…

图像处理-线性滤波-1 基础(相关算子、卷积算子、边缘效应)

这里讨论利用输入图像中像素的小邻域来产生输出图像的方法&#xff0c;在信号处理中这种方法称为滤波&#xff08;filtering&#xff09;。其中&#xff0c;最常用的是线性滤波&#xff1a;输出像素是输入邻域像素的加权和。1.相关算子&#xff08;Correlation Operator)定义&a…

力拎30磅!波士顿动力物流机器人Handle亮相,还会摆货架

来源&#xff1a;机器之心摘要&#xff1a;这是一个会堆箱子的机器人。自 2013 年被谷歌收购后&#xff0c;波士顿动力一直就是机器人公司中的「网红」&#xff0c;每次新视频的发布都能引起业内极大的关注。后来&#xff0c;因种种原因&#xff0c;波士顿动力于 2017 年被谷歌…

MFC基础类及其层次结构

MFC基础类及其层次结构 从类CComdTarget层层派生出绝大多数MFC中的类&#xff0c;其层次结构为下图所示. 从根类Cobject层层派生出绝大多数MFC中的类&#xff0c;其层次结构为下图所示. MFC中重点类 其中&#xff0c;CObject类是MFC提供的绝大多数类的基类。该类完成动态空间的…

6个整改!2018年国家重点实验室评估结果公布

来源&#xff1a;科技部网站近日&#xff0c;国家科技部公布了2018年工程和材料领域国家重点实验室评估处理结果。本次64个实验室参加评估&#xff0c;其中工程领域共有43个&#xff0c;材料领域共有21个。评估结果显示&#xff0c;共有6个实验室要求整改&#xff0c;没有实验室…