精华内容
下载资源
问答
  • matlab蒲丰投实验

    2020-04-19 11:06:19
    matlab实现的蒲丰投实验,本次实验为改进后,采用随机模拟方法,推演出每次的位置,并求得概率,
  • 布丰投实验原理、仿真过程以及 MATLAB仿真代码、完整的布丰投实验报告。
  • 指针式仪表的自动识别,图像处理与图像识别,利用matlab对真个过程进行仿真计算
  • MATLAB实现布冯投实验的原理,动态显示投的过程。
  • %% Modelado de la c醡ara PinHoleclose allclcclear all% En coordenadas homogC = [0,0,0,1]';C1 = [0,0,1,1];PlanoProyeccion = [0 0 -1 1]';% Coordenadas del Centro de visiC = [0,0,0,1];...

    %% Modelado de la c醡ara PinHole

    close all

    clc

    clear all

    % En coordenadas homog

    C = [0,0,0,1]';

    C1 = [0,0,1,1];

    PlanoProyeccion = [0 0 -1 1]';

    % Coordenadas del Centro de visi

    C = [0,0,0,1];

    C1 = [0,0,1,1];

    figure

    plot3([C(1) C1(1)],[C(2) C1(2)],[C(3) C1(3)]);

    scatter3(C(1),C(2),C(3),'rx','LineWidth',4);

    hold on;

    % Plano de proyecci髇 Z = 1;

    [PX,PY] = meshgrid(linspace(-1,1,50),linspace(-1,1,50));

    PZ = -(PlanoProyeccion(1)*PX + PlanoProyeccion(2)*PY + PlanoProyeccion(4))/PlanoProyeccion(3);

    surf(PX,PY,PZ,0.5*ones(size(PZ)),'EdgeAlpha',0,'FaceAlpha',0.1,'FaceColor','b');

    % 对于点P

    P = [0.5 0.5 2 1]';

    % 它的投影将根据从点C到平面的距离f给出

    fx = 1;

    fy = 1;

    K = [fx 0 0 0; 0 fy 0 0; 0 0 1 0];

    Pproyectado = (K*P)';

    Pproyectado = Pproyectado/Pproyectado(3);

    scatter3(P(1),P(2),P(3),'gx','LineWidth',4);

    scatter3(Pproyectado(1),Pproyectado(2),Pproyectado(3),'gx','LineWidth',4);

    plot3([P(1) C(1)],[P(2) C(2)],[P(3) C(3)],'g')

    axis equal

    hold off

    %%

    % 任何数字

    figure

    N = 100;

    t = linspace(5,25,N);

    X = 10*cos(t)./(2*t);

    Y = 10*sin(t)./(2*t);

    Z = 2*sin(1.05*X)./X;

    espiral = [X;Y;Z;ones(size(X))]';

    plot3(espiral(:,1),espiral(:,2),espiral(:,3),'LineWidth',2);

    grid on

    hold on

    % Modelo c醡ara

    plot3([C(1) C1(1)],[C(2) C1(2)],[C(3) C1(3)]);

    scatter3(C(1),C(2),C(3),'rx','LineWidth',4);

    surf(PX,PY,PZ,0.5*ones(size(PZ)),'EdgeAlpha',0,'FaceAlpha',0.1,'FaceColor','g');

    % Dibujamos las l韓eas de proyecci髇

    for i=1:5:length(espiral)

    A = espiral(i,:);

    plot3([A(1) C(1)],[A(2) C(2)],[A(3) C(3)],'-.b','LineWidth',0.5);

    end

    % 用K计算投影点

    Espiral_proyectada = (K*espiral')';

    Espiral_proyectada = Espiral_proyectada./repmat(Espiral_proyectada(:,3),[1,3]);

    plot3(Espiral_proyectada(:,1),Espiral_proyectada(:,2),Espiral_proyectada(:,3),'r','LineWidth',2);

    hold off

    axis equal

    title('透视投影模型得到的像点图');

    %%

    % %使相机偏移以匹配投影图像的像素

    % %假设相机投影的中心在:

    figure

    Pcentro = [0.4 -0.5 1];

    % Pcentro = [640 400 1];

    px = Pcentro(1);

    py = Pcentro(2);

    % Ahora K

    K = [fx 0 px 0; 0 fy py 0; 0 0 1 0];

    % espiral 螺旋

    plot3(espiral(:,1),espiral(:,2),espiral(:,3),'LineWidth',2);

    grid on

    hold on

    % Model

    plot3([C(1) C1(1)],[C(2) C1(2)],[C(3) C1(3)]);

    scatter3(C(1),C(2),C(3),'rx','LineWidth',4);

    surf(PX,PY,PZ,0.5*ones(size(PZ)),'EdgeAlpha',0,'FaceAlpha',0.1,'FaceColor','g');

    Espiral_proyectada2 = (K*espiral')';

    Espiral_proyectada2 = Espiral_proyectada2./repmat(Espiral_proyectada2(:,3),[1,3]);

    plot3(Espiral_proyectada2(:,1),Espiral_proyectada2(:,2),Espiral_proyectada2(:,3),'r','LineWidth',2);

    hold off

    axis equal

    % 相机移动到另一个地方,检查投影和模型内在参数与外在参数的百分比。

    figure

    % 假设相机已移动到另一个位置/平移

    T = [0.5 0.5 0.5]';

    % 通过反转转换将其应用于校准矩阵

    TrMat = [eye(3) T; 0 0 0 1];

    % 将转换应用于相机模型

    C_tras = TrMat*C';

    C1_tras = TrMat*C1';

    % N髏ese que para mover el plano se aplica el inverso de la transformada de la matriz de transformaci髇 para un plano DUALIDAD

    Plano_tras = (TrMat')\PlanoProyeccion;

    PZ_tras = -(Plano_tras(1)*PX + Plano_tras(2)*PY + Plano_tras(4))/Plano_tras(3);

    plot3([C(1) C1(1)],[C(2) C1(2)],[C(3) C1(3)],'r');

    hold on

    scatter3(C(1),C(2),C(3),'rx','LineWidth',4);

    surf(PX,PY,PZ,0.5*ones(size(PZ)),'EdgeAlpha',0,'FaceAlpha',0.2,'FaceColor','r');

    plot3([C_tras(1) C1_tras(1)],[C_tras(2) C1_tras(2)],[C_tras(3) C1_tras(3)],'b');

    scatter3(C_tras(1),C_tras(2),C_tras(3),'bx','LineWidth',4);

    surf(PX,PY,PZ_tras,0.5*ones(size(PZ_tras)),'EdgeAlpha',0,'FaceAlpha',0.2,'FaceColor','b');

    %%

    px = 0;

    py = 0;

    K = [fx 0 px 0; 0 fy py 0; 0 0 1 0;0 0 0 1];

    % 必须对对象应用逆变换

    invTrMat = inv(TrMat);

    % %新的投影建模矩阵为:

    % %首先,我们翻译对象,然后将模型应用于该对象

    P = K*invTrMat;

    plot3(espiral(:,1),espiral(:,2),espiral(:,3),'LineWidth',2);

    Espiral_proyectada3 = (P*espiral')';

    %

    Espiral_proyectada3(:,1:3) = Espiral_proyectada3(:,1:3)./repmat(Espiral_proyectada3(:,3),[1,3]);

    % 通过移动图像的坐标,可以将图像的坐标转换为平面的坐标

    % Z平面移动到新位置后的%图像百分比

    % 相机百分比

    Espiral_proyectada3 = (TrMat*Espiral_proyectada3')';

    plot3(Espiral_proyectada3(:,1),Espiral_proyectada3(:,2),Espiral_proyectada3(:,3),'r','LineWidth',2);

    hold off

    axis equal

    %

    figure

    rots = [pi/3 0 0]';

    T = [0 0 0]';

    Rt = [cos(rots(3)) sin(rots(3)) 0 ; -sin(rots(3)) cos(rots(3)) 0 ; 0 0 1] * ...

    [cos(rots(2)) 0 sin(rots(2)) ;0 1 0 ; -sin(rots(2)) 0 cos(rots(2))] * ...

    [1 0 0 ; 0 cos(rots(1)) sin(rots(1)) ; 0 -sin(rots(1)) cos(rots(1))];

    TrMat = [eye(3) T; 0 0 0 1]*[Rt zeros(3,1);0 0 0 1];

    px = 0;

    py = 0;

    K = [fx 0 px 0; 0 fy py 0; 0 0 1 0;0 0 0 1];

    %

    C_tras = TrMat*C';

    C1_tras = TrMat*C1';

    %

    Plano_tras = (TrMat')\PlanoProyeccion;

    PZ_tras = -(Plano_tras(1)*PX + Plano_tras(2)*PY + Plano_tras(4))/Plano_tras(3);

    plot3([C(1) C1(1)],[C(2) C1(2)],[C(3) C1(3)],'r');

    hold on

    scatter3(C(1),C(2),C(3),'rx','LineWidth',4);

    surf(PX,PY,PZ,0.5*ones(size(PZ)),'EdgeAlpha',0,'FaceAlpha',0.2,'FaceColor','r');

    plot3([C_tras(1) C1_tras(1)],[C_tras(2) C1_tras(2)],[C_tras(3) C1_tras(3)],'b');

    scatter3(C_tras(1),C_tras(2),C_tras(3),'bx','LineWidth',4);

    surf(PX,PY,PZ_tras,0.5*ones(size(PZ_tras)),'EdgeAlpha',0,'FaceAlpha',0.2,'FaceColor','b');

    %

    invTrMat = [Rt' -Rt'*T; 0 0 0 1];

    % La nueva matriz de modelado de la proyecci髇 es:

    % Primero trasladamos el objeto y luego le aplicamos el modelo

    P = K*invTrMat;

    plot3(espiral(:,1),espiral(:,2),espiral(:,3),'LineWidth',2);

    % Se crea la proyecci髇

    Espiral_proyectada3 = (P*espiral')';

    % Se transforman a coordenadas de la imagen

    Espiral_proyectada3(:,1:3) = Espiral_proyectada3(:,1:3)./repmat(Espiral_proyectada3(:,3),[1,3]);

    % Se transforman las coordenadas de la imagen a las del plano moviendo la

    % imagen del plano Z a la nueva posici髇 siguiendo el movimiento de la

    % c醡ara

    Espiral_proyectada3 = (TrMat*Espiral_proyectada3')';

    plot3(Espiral_proyectada3(:,1),Espiral_proyectada3(:,2),Espiral_proyectada3(:,3),'r','LineWidth',2);

    hold off

    axis equal

    472124aabbe9286e77fd8f7a4c4aec8f.png

    展开全文
  • MATLAB识别指针式仪表的示数,所用方法为距离法,经过试验,该方法可以较为准确的识别指针式仪表的示数,代码中有详细的备注,便于读者理解
  • matlab画指北

    2021-04-19 02:31:49
    怎样用matlab画等高线?命令1contour功能曲面的等高线图用法contour(z)把矩阵z中的值作为一个二维函数的值,等高曲线是一个平面的曲线,平面的高度v是Matlab自动取的;contour(x,y,z)(x,y)是matlab 画三角形gplot(ones...

    怎样用matlab画等高线?

    命令1contour功能曲面的等高线图用法contour(z)把矩阵z中的值作为一个二维函数的值,等高曲线是一个平面的曲线,平面的高度v是Matlab自动取的;contour(x,y,z)(x,y)是

    matlab 画三角形

    gplot(ones(3),rand(3))或fill(rand(3,1),rand(3,1),'w')或patch(rand(3,1),rand(3,1),'w')

    怎样用matlab画椭球?

    ellipsoid函数,格式如下:[x,y,z]=ellipsoid(xc,yc,zc,xr,yr,zr,n)%(xc,yc,zc)为中心,xr,yr,zr为半轴长.demo如下:[x,y,z]=el

    为什么是指南针而不是指北针?

    当年黄帝大战蚩尤的时候造了指南车,后来发明了司南,它的勺柄是指向南方的,不像我们现在的指南针两端是一样长,对称的.指向性比较明显.到了北宋初年,有了人工磁化法,用天然磁石磨擦钢针,制出磁针.这种经过磁

    指南针 为什么不叫 指北针

    指南针只是一个叫法,红的指南,蓝的指北.其实完全可以叫指北针的~~~只是那个一开始叫司南,所以演变下来就成了指南针~再问:听起来有点片面吧再答:其实现在军事上用的指南针已经基本改称指北针了,就是一个说

    指南针与指北针有什么区别?

    指南针——历史上人们关注太阳的活动,有这个称呼指北针——北半球地区距离磁北极比较近,而且专业制图需要考虑地理北极与磁北极的偏角(磁偏角),所以现在大多称呼指北针.二者是一个东西.

    指南针为什么不叫“指北针”?

    为什么叫指南针呢?就是因为这东西用来指南的.况且,最早在战国时期《韩非子》一书中,就记载了现在称为指南针的原型——司南,“先王立司南以端朝夕”;并在东汉王充《论衡》中便记述了司南的具体形制,“司南之杓

    “指南针”和“指北针”的区别是什么?

    指南针——历史上人们关注太阳的活动,有这个称呼指北针——北半球地区距离磁北极比较近,而且专业制图需要考虑地理北极与磁北极的偏角(磁偏角),所以现在大多称呼指北针.二者是一个东西.

    指南针和指北针有什么区别求大神帮助

    原理是差不多的了,只是标记方向不同罢了.古时修多用指南针,和太阳的方向同.现在多生产和使用指北针,是因为看地图的时候一般都先找北,再按上北下南左西右东来看地图方向,所以指北针设计和使用比较更合理.

    指南针为什么不叫指北针,指西针和指东针

    地球是个大磁体,其地磁南极在地理北极附近,地磁北极在地理南极附近.  指南针在地球的磁场中受磁场力的作用,所以会一端指南一端指北.  我国“四大发明”之一的指南针,辗转传入欧洲后在航海大发现中发挥出不

    指北针和地质罗盘仪功能完全一样吗?

    对于地质野外技术人员,罗盘是必不可少的!除了具有指南针作用,还可测量方位、坡度,配合地形图可利用交汇法进行较准确定位,这是地质填图、布设剖面时最常用的定位方法;可以利用其水平气泡和垂直气泡进行岩层倾向

    指北针的作用,它在生活中的作用

    指北针的一端会一直指向地磁北极,用来确定方向

    收集指北针的资料,说说它在生活中的作用.

    指北针是一种用于指示方向的工具,广泛应用于各种方向判读,譬如航海、野外探险、城市道路地图阅读等领域.它也是登山探险不可或缺的工具,基本功能是利用地球磁场作用,指示北方方位,它必须配合地图寻求相对位置才

    指北针在生活中的作用

    指北针是一种用于指示方向的工具,广泛应用于各种方向判读,譬如航海、野外探险、城市道路地图阅读等领域.它也是登山探险不可或缺的工具,基本功能是利用地球磁场作用,指示北方方位,它必须配合地图寻求相对位置才

    指北针在生活中的作用是啥?

    指北针是一种用于指示方向的工具,广泛应用于各种方向判读,譬如航海、野外探险、城市道路地图阅读等领域.它也是登山探险不可或缺的工具,基本功能是利用地球磁场作用,指示北方方位,它必须配合地图寻求相对位置才

    地质罗盘仪和指北针有何区别?

    地质罗盘和指北针都是利用磁性的指针,在地磁的作用下,指示方向.不同的是,指北针上面的刻度比较稀疏,地质罗盘比较细致,360度每度一个刻度.指北针是大致定向,不考虑不同地区磁偏角的变化,地质罗盘则要考虑

    指南针和指北针有什么区别

    工作原理都一样,民用的一般习惯叫指南针,军用的叫指北针

    指北针在生活中的作用必须详细具体

    指北针是登山健行不可或缺的工具,它的基本功能是利用地球磁场作用,指示北方方位,它必须配合地图寻球相对位置才能明了自己身处的位置.目前市售的指北针式样繁多,本文将依据登山健行最广泛使用的透明底板指北针简

    为什么有了指南针还要有指北针

    没什么不同呀!完全就是一样东西.不管指南针还是指北针指针都有两头吧?当然就是一个指南,一个指北啦:)不过是叫法不同.中国古时候就有指南针、指南车、司南等等.好象对南比较感兴趣.而欧洲人好象对North

    指北针与指南针有什么区别?

    有些地方把指南针也叫指北针.原理其实是一样的,指向南的一边的时候不就是另一边就是指北吗...

    展开全文
  • %% Modelado de la c醡ara PinHole close all clc clear all % En coordenadas homog C = [0,0,0,1]'; C1 = [0,0,1,1]; PlanoProyeccion = [0 0 -1 1]';...% Coordenadas del Centro de visi ...plot3([C(1) C1(1)],[C(2) ...

     

    %% Modelado de la c醡ara PinHole
    close all
    clc
    clear all
    % En coordenadas homog
    C = [0,0,0,1]';
    C1 = [0,0,1,1];
    PlanoProyeccion = [0 0 -1 1]';
    
    % Coordenadas del Centro de visi
    C = [0,0,0,1];
    C1 = [0,0,1,1];
    figure
    plot3([C(1) C1(1)],[C(2) C1(2)],[C(3) C1(3)]);
    scatter3(C(1),C(2),C(3),'rx','LineWidth',4);
    hold on;
    
    % Plano de proyecci髇 Z = 1;
    [PX,PY] = meshgrid(linspace(-1,1,50),linspace(-1,1,50));
    PZ = -(PlanoProyeccion(1)*PX + PlanoProyeccion(2)*PY + PlanoProyeccion(4))/PlanoProyeccion(3);
    surf(PX,PY,PZ,0.5*ones(size(PZ)),'EdgeAlpha',0,'FaceAlpha',0.1,'FaceColor','b');
    
    
    % 对于点P
    P = [0.5 0.5 2 1]';
    
    % 它的投影将根据从点C到平面的距离f给出
    
    fx = 1;
    fy = 1;
    
    K = [fx 0 0 0; 0 fy 0 0; 0 0 1 0];
    
    Pproyectado = (K*P)';
    Pproyectado = Pproyectado/Pproyectado(3);
    
    scatter3(P(1),P(2),P(3),'gx','LineWidth',4);
    scatter3(Pproyectado(1),Pproyectado(2),Pproyectado(3),'gx','LineWidth',4);
    plot3([P(1) C(1)],[P(2) C(2)],[P(3) C(3)],'g')
    axis equal
    hold off
    %%
    % 任何数字
    
    figure
    
    N = 100;
    t = linspace(5,25,N);
    X = 10*cos(t)./(2*t);
    Y = 10*sin(t)./(2*t);
    Z = 2*sin(1.05*X)./X;
    espiral = [X;Y;Z;ones(size(X))]';
    plot3(espiral(:,1),espiral(:,2),espiral(:,3),'LineWidth',2);
    grid on
    hold on
    % Modelo c醡ara
    plot3([C(1) C1(1)],[C(2) C1(2)],[C(3) C1(3)]);
    scatter3(C(1),C(2),C(3),'rx','LineWidth',4);
    surf(PX,PY,PZ,0.5*ones(size(PZ)),'EdgeAlpha',0,'FaceAlpha',0.1,'FaceColor','g');
    
    % Dibujamos las l韓eas de proyecci髇
    
    for i=1:5:length(espiral)
        A = espiral(i,:);
        plot3([A(1) C(1)],[A(2) C(2)],[A(3) C(3)],'-.b','LineWidth',0.5);
    end
    
    
    % 用K计算投影点
    Espiral_proyectada = (K*espiral')';
    Espiral_proyectada = Espiral_proyectada./repmat(Espiral_proyectada(:,3),[1,3]);
    plot3(Espiral_proyectada(:,1),Espiral_proyectada(:,2),Espiral_proyectada(:,3),'r','LineWidth',2);
    hold off
    axis equal
    title('透视投影模型得到的像点图');
    
    %%
    % %使相机偏移以匹配投影图像的像素
    %   %假设相机投影的中心在:
    figure
    Pcentro = [0.4 -0.5 1];
    % Pcentro = [640 400 1];
    px = Pcentro(1);
    py = Pcentro(2);
    % Ahora K
    
    K = [fx 0 px 0; 0 fy py 0; 0 0 1 0];
    
    %  espiral 螺旋
    plot3(espiral(:,1),espiral(:,2),espiral(:,3),'LineWidth',2);
    grid on
    hold on
    % Model
    plot3([C(1) C1(1)],[C(2) C1(2)],[C(3) C1(3)]);
    scatter3(C(1),C(2),C(3),'rx','LineWidth',4);
    surf(PX,PY,PZ,0.5*ones(size(PZ)),'EdgeAlpha',0,'FaceAlpha',0.1,'FaceColor','g');
    
    Espiral_proyectada2 = (K*espiral')';
    Espiral_proyectada2 = Espiral_proyectada2./repmat(Espiral_proyectada2(:,3),[1,3]);
    plot3(Espiral_proyectada2(:,1),Espiral_proyectada2(:,2),Espiral_proyectada2(:,3),'r','LineWidth',2);
    hold off
    axis equal
    
    % 相机移动到另一个地方,检查投影和模型内在参数与外在参数的百分比。
    figure
    % 假设相机已移动到另一个位置/平移
    
    T = [0.5 0.5 0.5]';
    
    % 通过反转转换将其应用于校准矩阵
    TrMat = [eye(3) T; 0 0 0 1];
    
    % 将转换应用于相机模型
    C_tras = TrMat*C';
    C1_tras = TrMat*C1';
    
    % N髏ese que para mover el plano se aplica el inverso de la transformada de la matriz de transformaci髇 para un plano DUALIDAD
    Plano_tras = (TrMat')\PlanoProyeccion; 
    PZ_tras = -(Plano_tras(1)*PX + Plano_tras(2)*PY + Plano_tras(4))/Plano_tras(3);
    
    plot3([C(1) C1(1)],[C(2) C1(2)],[C(3) C1(3)],'r');
    hold on
    scatter3(C(1),C(2),C(3),'rx','LineWidth',4);
    surf(PX,PY,PZ,0.5*ones(size(PZ)),'EdgeAlpha',0,'FaceAlpha',0.2,'FaceColor','r');
    plot3([C_tras(1) C1_tras(1)],[C_tras(2) C1_tras(2)],[C_tras(3) C1_tras(3)],'b');
    scatter3(C_tras(1),C_tras(2),C_tras(3),'bx','LineWidth',4);
    surf(PX,PY,PZ_tras,0.5*ones(size(PZ_tras)),'EdgeAlpha',0,'FaceAlpha',0.2,'FaceColor','b');
    
    
    %%
    
    px = 0;
    py = 0;
    K = [fx 0 px 0; 0 fy py 0; 0 0 1 0;0 0 0 1];
    
    % 必须对对象应用逆变换
    invTrMat = inv(TrMat);
    
    % %新的投影建模矩阵为:
    %   %首先,我们翻译对象,然后将模型应用于该对象
    P = K*invTrMat;
    
    plot3(espiral(:,1),espiral(:,2),espiral(:,3),'LineWidth',2);
    Espiral_proyectada3 = (P*espiral')'; 
    % 
    Espiral_proyectada3(:,1:3) = Espiral_proyectada3(:,1:3)./repmat(Espiral_proyectada3(:,3),[1,3]);
    % 通过移动图像的坐标,可以将图像的坐标转换为平面的坐标
    %   Z平面移动到新位置后的%图像百分比
    %   相机百分比
    Espiral_proyectada3 = (TrMat*Espiral_proyectada3')';
    plot3(Espiral_proyectada3(:,1),Espiral_proyectada3(:,2),Espiral_proyectada3(:,3),'r','LineWidth',2);
    hold off
    axis equal
    %
    figure
    rots = [pi/3 0 0]';
    T = [0 0 0]';
    
    Rt = [cos(rots(3)) sin(rots(3)) 0 ; -sin(rots(3)) cos(rots(3)) 0 ; 0 0 1] * ...
                 [cos(rots(2)) 0 sin(rots(2)) ;0 1 0 ; -sin(rots(2)) 0 cos(rots(2))] * ...
                 [1 0 0 ; 0 cos(rots(1)) sin(rots(1)) ; 0 -sin(rots(1)) cos(rots(1))];         
             
    
    TrMat = [eye(3) T; 0 0 0 1]*[Rt zeros(3,1);0 0 0 1];
    
    
    px = 0;
    py = 0;
    K = [fx 0 px 0; 0 fy py 0; 0 0 1 0;0 0 0 1];
    
    
    % 
    C_tras = TrMat*C';
    C1_tras = TrMat*C1';
    
    % 
    Plano_tras = (TrMat')\PlanoProyeccion; 
    PZ_tras = -(Plano_tras(1)*PX + Plano_tras(2)*PY + Plano_tras(4))/Plano_tras(3);
    
    plot3([C(1) C1(1)],[C(2) C1(2)],[C(3) C1(3)],'r');
    hold on
    scatter3(C(1),C(2),C(3),'rx','LineWidth',4);
    surf(PX,PY,PZ,0.5*ones(size(PZ)),'EdgeAlpha',0,'FaceAlpha',0.2,'FaceColor','r');
    plot3([C_tras(1) C1_tras(1)],[C_tras(2) C1_tras(2)],[C_tras(3) C1_tras(3)],'b');
    scatter3(C_tras(1),C_tras(2),C_tras(3),'bx','LineWidth',4);
    surf(PX,PY,PZ_tras,0.5*ones(size(PZ_tras)),'EdgeAlpha',0,'FaceAlpha',0.2,'FaceColor','b');
    
    % 
    invTrMat = [Rt' -Rt'*T; 0 0 0 1];
    
    % La nueva matriz de modelado de la proyecci髇 es:
    % Primero trasladamos el objeto y luego le aplicamos el modelo
    P = K*invTrMat;
    
    plot3(espiral(:,1),espiral(:,2),espiral(:,3),'LineWidth',2);
    % Se crea la proyecci髇
    Espiral_proyectada3 = (P*espiral')'; 
    % Se transforman a coordenadas de la imagen
    Espiral_proyectada3(:,1:3) = Espiral_proyectada3(:,1:3)./repmat(Espiral_proyectada3(:,3),[1,3]);
    % Se transforman las coordenadas de la imagen a las del plano moviendo la
    % imagen del plano Z a la nueva posici髇 siguiendo el movimiento de la
    % c醡ara
    Espiral_proyectada3 = (TrMat*Espiral_proyectada3')';
    plot3(Espiral_proyectada3(:,1),Espiral_proyectada3(:,2),Espiral_proyectada3(:,3),'r','LineWidth',2);
    
    hold off
    axis equal

    展开全文
  • Matlab 气象绘制实例

    2018-08-17 19:02:52
    Matlab气象绘制,有助于了解利用Matlab软件如何进行气象常用的绘制流程!
  • 一、课题介绍随着模式识别技术、计算机技术等多种技术的不断完善和...首先通过摄像头采集仪表图像,通过传输装置以无线的方式把图像传输到电脑上,然后在电脑上通过matlab程序设计,处理图像,读取仪表的数据,然后...

    一、课题介绍

    随着模式识别技术、计算机技术等多种技术的不断完善和发展,机器视觉获得了巨大的进步与发展。目前在许多企业中,存在着大量的仪表,仪表的读数都要靠人来完成,工作量很大而且误差率相对来说比较高,基于这个原因,设计了一个工业生产线在线检测数据数字化处理系统。首先通过摄像头采集仪表图像,通过传输装置以无线的方式把图像传输到电脑上,然后在电脑上通过matlab程序设计,处理图像,读取仪表的数据,然后用labview调用matlab程序,并设计一个显示界面,通过界面可以看到实时的数据与仪表图像以及在一段时间内数据的变化情况。最后通过labview访问access数据库,将读取的数据传入数据库中,便于被调用,最终实现检测数据的数字化处理。

    二、课题背景

    近年来,随着科学技术的进步,许多新兴的技术不断的产生与发展,机器视觉技术也随着图像处理等技术的发展而逐渐产生,而且发展很快。近些年来,世界范围内涌现了许多的专门从事机器视觉技术的公司,有许多的公司得到了很好的利润。现阶段,国内的机器视觉技术虽然刚起步不长的时间,但是,也有几家公司在这方面取得了不错的成绩,并且发展的速度也很快。所谓的机器视觉是以通过处理图像达到类似于人眼的视觉的效果,提高工作效率减轻人的工作负担,为最终目的。相比于人类的视觉,首先机器视觉不会出现疲劳现象,而且机器视觉识别的精度可以比人眼的识别的精度还要高一些。目前,很多领域中都出现了机器视觉技术的影子,这也体现出了机器视觉技术的研究价值。主要应用的领域有:医学领域、工业检测领域、监控管理、航天领域等。当机器视觉技术应用于工业检测领域时,可以实现工业生产线在线检测数据的自动读取,提高读数的准确性,有效减轻人的负担,及时准确的发现问题、解决问题。

    进入21世纪后,电子类的仪表应用的越来越多,准确度更高的数字式仪表大有取代传统的指针式仪表的趋势。但是,数字式的仪表在某些情况下不能使用,对环境的适应性比较差,比如,在读数快速变化的时候就不适合使用了,而且,相比于指针式仪表来说,数字仪表价格相对较高,大批量的购买成本会上升很多。指针式仪表则可以适用于很多的场合,环境因素对其约束相对来说不大。除此之外,指针式仪表还有许多其他的优点,比如,抗干扰性强,防尘,防水等,因此我们国家的许多行业中,尤其是那些严禁易燃易爆的场合,比如电力、石油、化工等,指针式仪表仍然是首选,在环境恶劣的场合,根本无法使用数字式的仪表。在一般的工厂中,指针式的仪表数量大、种类多,这些仪表的读数十分的麻烦,而且工作量很大,工作效率很低。传统上人们是检定指针式仪表的方法是人工判读,但是这种判别方法会受到许多人为因素的干扰,比如人的观测仪表角度、疲劳强度以及观测的距离,具有工作强度大,误差率大等缺点,不能实现仪表读数与检测的自动化。每个仪表都需要依靠人来瞄准,每个仪表的操作也需要依靠人来完成,这种方式的工作量大,效率低。

    为了缩短检测的时间,有效减轻工作人员工作强度 ,提高检测工作的自动化水平,设计工业生产线在线检测数据数字化处理系统是很有必要的。利用机器视觉技术,可以实现仪表图像的采集、识别以及仪表数据的读取,而整个设计的关键就在于如何用图像识别的方式识别仪表,读取数据。

    三、课题研究现状

    工业生产线在线监测数据的数字化处理系统的设计的核心是使用图像识别的方法识别仪表,指针式仪表的读数识别研究起步相对来说较晚,1994年,sablatnig等人提出了利用hough变换来检测指针式仪表的读数的方法[1][1]。1995 年,韩国的 Kyong-Ho Kim 等人成功的实现了对核装置数字表的图像分割,采用的方法是区域划分和阈值法,最终采取一系列的措施,建立一个完全自动化仪表识别系统[2][2]。Correa Alegria等人完成了利用机器视觉技术对指针式仪表的检定,整个过程为,首先使用摄像头采集图像,然后采用减影法处理图像,保存图像,然后利用霍夫变换检测直线,识别指针,并且读出指针的角度然,最后,根据指针角度通过计算,得到指针的读数[3][3]。孙凤杰等人提出一种新的提取指针的方法,这种新方法适合较差光照条件下使用,从而解决了光照条件对指针分割的约束问题,取得了较好的识别效果[4][4]。黎明和王厚枢设计了一个飞机座舱仪表读数的识别系统,这个系统首先进行图像二值化,主要运用的小波变换来提取指针及刻度,并且成功的去除了光线以及各种外部噪声对整个读数系统的影响,检测出指针和刻度后,找到仪表圆心,测量出指针的角度,找到指针角度与读数的关系,并成功读取数据,这个系统的识别精度很高,完全高于人眼的识别,而且成功实现了在线测试[5][5]。周洪和钟明慧成功的实现了指针式的仪表的数据的自动读取。这种读数方法突破了距离的限制,可以远距离的通过读取到仪表的读书,而且读数准确,延迟也很小,可以在线测试,整个系统的安装也很简单,而且成本也很低,对于一些危险场合的仪表读数具有重要的现实意义[6][6]。2007年,杨晓敏等人设计了一种新的识别方法,这种方法的原理与车牌识别的远离非常相似模,是一种高斯混合模型识别方法[7][7]。何智杰等人设计了一种新的仪表读数的识别方法,这种新方法特别适合精度很高的指针仪表,这个方法中主要运用了霍夫变换和中心投影分析法,这种方法可以实现刻度的全自动识别,而且还提高了识别的精度和速度[8][8]。宁志刚等提出一种可应用于高精度指针仪表读数的方法,该方法的原理是利用脊波来提取仪表图像中的直线,可实现自动跟踪判读[9][9]。


    四、系统总体方案设计

    4.1设计方案

    工业生产线在线检测数据数字化处理系统主要由图像采集装置、图像发射与接受装置、图像处理部分以及客户端等部分组成。设计方案如下所示:

    v2-574285913ef88585c57ba83316d6d281_b.jpg

    图像发射与接收装置采用的是无线影音发射器,图像处理部分是由matlab来完成的,而客户端则是由labview来设计的。

    4.2图像处理与仪表数据的读取

    4.2.1图像预处理

    在图像采集的过程中,会受到许多的干扰,包括自身的和外界的,例如,外界光照条件的影响,摄像头像素的高低,仪表表盘的清洁程度以及各种振动及噪声的干扰。受到诸多的干扰后得到的照片可能会是模糊的,可能无法获取我们需要的信息,要想得到有用的信息就必须想办法去掉这些干扰。我们通过摄像头的到的图像都是彩色的,里面蕴含了大量的信息,处理起来相当繁琐,而且计算也非常复杂,容易出现错误,所以为了处理简单,必须要把彩色图片转化为蕴含信息比较少的灰度图片。这些都是要通过图像预处理来实现,图像预处理的目的是去除图像上的噪声,减少图像的信息,简化运算,为图像处理打好基础。图像预处理包括:图像滤波去噪,图像增强,图像二值化,边缘检测与图像检测。

    4.2.1.1图像滤波去噪

    图像在采集、获取和传输的过程中,几乎所有的图像都会收到不同程度的噪声污染,这些噪声有的是可见的,有的是不可见的,有的噪声污染在图像上体现的很明显,有的则是难以察觉的。对于不同的地点,信噪比是不同的,信噪比越大,图像的质量则越好,但当信噪比低于一定的数值时,噪声将会变成人眼可见的颗粒状,图片就会变得模糊起来,图片质量也会相应的下降。更重要的是,噪声所产生的颗粒有可能会掩盖我们需要的信息细节,由于在工厂中采集图像的过程中,噪声污染是不可避免的,而且噪声污染体现在视觉上也是比较明显的,所以必须要对图像进行滤波去噪的处理,因为摄像头所采集到的照片是彩色的,数据量很大,计算复杂,处理起来容易出错,而颜色信息对于最终的读数是没有影响的,所以,为了简化运算,使图像的处理变得先对简单,在滤波去噪之前,先要对图像进行灰度化处理,然后再进行滤波,在本设计中采用的是中值滤波.


    v2-68d1d9f7483c6205609baeddce7c3fff_b.jpg

    v2-4d301926640b63bddd6154354fefd8d7_b.jpg

    图3-7 加入盐噪声的图片与滤波后的图片

    4.2.1.2图像增强

    图像增强是以改善图像的视觉效果为根本目的的,在采集图像的过程中,特别是在工厂中,光照条件对图片质量的影响十分明显,而拍摄的过程中可能会出现曝光过度或者曝光不足的现象,这样得到的图像将会是模糊的,表盘上的指针刻度区域与背景区域的区分不是很明显,不利于仪表图像的识别。为了使表盘上指针刻度区域与背景区域的界限变得明显,需要对图像进行空间域的图像增强。空间域的的图像增强主要有两种方式,直方图的均衡化处理和灰度变换,本设计中采用的是灰度变换。

    图像增强的主要程序为:

    j=imread('1.jpg');

    x=RGB2gray(j);

    subplot(1,2,1);

    imshow(x);

    title('原图像');

    f=double(x);

    [m,n]=size(f);

    h=fspecial('gaussian',[25,25],80);

    q=imfilter(f,h,'same');

    s=log(f+0.03)-log(q+0.03);

    r=exp(s);

    max_r=max(r(:))*0.27;

    min_r=min(r(:));

    r=(r-min_r)/(max_r-min_r);

    index=find(r>1);

    r(index)=1;

    R=mat2gray(r);

    subplot(1,2,2);

    imshow(R);

    title('处理后的图像');

    G=im2bw(R,0.7);

    imshow(G);

    I=uint8(G);

    bw=edge(I,'sobel');

    imshow(bw);


    v2-46205e50d6610b2dc9ba8ff4e7cfa618_b.jpg

    图3-8 增强后的图片

    3.2.1.3二值化处理

    进行完图像增强后的图像是灰度图像,灰度图像的每个像素都可以在0-255之间取值,每个像素都可以有如此多的取值,这样的图像计算和处理起来十分的麻烦,而且容易出错,所以,就要对图像进行二值化处理,使图像的每个像素只能去0与1两个值,“0”作为目标区域,“1”作为背景区域,反之,亦可以,这样计算将变得相对简单,也不容易出错。用来划分背景区域和目标区域的那个灰度值就称作为阈值,大于阈值的像素值全部设为1,小于阈值的则全部设为0.图像的二值化[10][11]处理是图像处理中最常用的技术,在图像处理中具有至关重要的地位。主要有三个原因,首先,在彩色图像或者灰度图像的处理过程中,都要先将图像进行二值化处理,然后再进行更深层次的计算。其次,在理论上和方法上图像二值化比灰度图像处理更加系统化,也更加稳定。 第三,当图像处理的对象是文字或者图纸的时候,从本质上来说,背景和图形也是一种二值化的图像。图像二值化的主要程序为:

    T=0.5*(double(min(I(:)))+double(max(I(:))));

    done=false;

    while ~done

    g=I>=T;

    Tnext=0.5*(mean(I(g))+mean(I(~g)));

    done=abs(T-Tnext)<0.5;

    T=Tnext;

    end

    J=I;

    K=find(J>=T);

    J(K)=255;

    K=find(J<T);

    J(K)=0;

    figure;


    v2-1a9117e8a941e292a709f671a9b75f2f_b.jpg

    图3-9 二值化图片

    4.2.1.4边缘检测与图像分割

    对于图像处理来说,边缘检测是必须的。因为从边缘的定义上就可以看出,边缘是图像的重要的基本特征。边缘蕴含着图像的方向、阶跃性质与形状重要的信息,而这些信息十分的重要,它可以应用在在图像分割、特征提取、图像分类、图像配准以及图像识别中。图像边缘可以分为两大类,一类是阶跃状边缘,另一类是屋顶状边缘,其中两边灰度值有明显的变化的是阶跃状边缘;而在灰度减小和增加的交界处的是屋顶状边缘。首先通过利用边缘增强算子,来突出图像中局边缘,然后再定义像素的“边缘强度”,最后通过设置阈值来提取边缘点集是边缘检测的基本的思想。边缘检测方法有Sobel算子法[11][12]、 Robert算子法[12][13]、 PreWltt算子法[13][14]、LOG算子法、Canny算子法、Zerocross算子法[14][15]以及二值图像边缘检测法等。这些算法各有特点,适用的条件也不一样。本设计中采用的是Sobel算子法。

    图4-10为边缘检测的结果

    v2-82ad33bbfc5fa07a4d39da8ead109021_b.jpg

    图4-10 边缘检测

    4.2.2指针识别

    指针的识别可以说是识别读数最为重要的环节,仪表的读数都是有指针决定的,指针在采集图像的过程中会连续的变换指向,在摄像头与表盘无相对运动的情况下,摄像头采集到的指针位置不同的两幅图像,指针也可以看作一条直线,而且比其他刻度线都要长很多,所以可以采用霍夫变换来检测指针,以及识别其他的刻度。

    霍夫变换在图像处理中一种应用很广泛的识别几何形状的方法,以霍夫变换额、为原理,衍生出许多其他的算法,但是从黑白图像中检测直线或者线段是最基本的霍夫变换。本设计中指针检测的主要思路为,首先通过霍夫检测检测出所有的直线,包括所有的刻度和指针,而指针则是所有直线中最长的,所以,接下来设计程序求这些所检测出的直线中的最长的线,然后对直线的起始位置进行标记,并对直线进行标记。

    图4-11为利用霍夫变换检测直线,图4-12为检测出的指针图像,指针检测的主要程序为:

    xlabel('\theta'), ylabel('\rho');

    axis on, axis normal, hold on;

    P = houghpeaks(H,1,'threshold',ceil(0.3*max(H(:))));

    x = T(P(:,2));

    y = R(P(:,1));

    plot(x,y,'s','color','white');

    lines = houghlines(BW,T,R,P,'FillGap',5,'MinLength',7);

    hold on;

    figure, imshow(RGB), hold on

    max_len = 0;

    for k = 1:length(lines)

    xy = [lines(k).point1; lines(k).point2];

    plot(xy(:,1),xy(:,2),'LineWidth',2,'Color','green');

    plot(xy(1,1),xy(1,2),'x','LineWidth',2,'Color','yellow'); plot(xy(2,1),xy(2,2),'x','LineWidth',2,'Color','red');

    len = norm(lines(k).point1 - lines(k).point2);

    if ( len > max_len)

    max_len = len;

    xy_long = xy;

    end

    end



    v2-59ec7b384386aa0308afd6ff12fa054b_b.jpg

    图4-11 霍夫变换检测直线

    v2-54e52da1516505af227481cc2fe6ec03_b.jpg

    图4-12 指针识别

    4.2.3读数识别

    仪表表盘的读数识别是整个读数系统中最为重要的的部分,目前读数识别的方法多种多样,经过在工厂的实地考察,发现该工厂的有些材料生产车间环境相对较差,表盘难以时刻保持清洁,总是沾带有大量的粉尘,通过距离法读取表盘的读数相对来说比较困难,也不够稳定,而选取通过指针角度来读取表盘数据则可以更好的适应环境,提高读数的稳定性。读数识别的主要程序如下:

    plot(xy_long(:,1),xy_long(:,2),'LineWidth',2,'Color','cyan');

    k=(xy(2,2)-xy(1,2))/(xy(2,1)-xy(1,1));

    theta=pi/2+atan(k);

    if((xy(1,1)+xy(2,1))/2<=N/2)

    q=(theta+pi)*180/3.14;

    else

    q=theta*180/3.14;

    end

    shishu=q*c/Q;

    disp (theta);

    disp (q);

    disp (shishu);


    4.3数据显示界面的设计

    表盘数据读取出来后,需要直观的显示出来,这时就需要搭建一个显示界面,如今,有多种软件可实现见面搭建的功能,本设计中选择的是GUI图形化编程软件。


    v2-cf5e8549c6de5c3f367acabdf2d27562_b.jpg

    图4-13 前面板

    五、 matlab源码程序

    clear;

    clc;

    close all;

    RGB=imread('1.jpg');

    figure,imshow(RGB); title('RGB')

    GRAY=rgb2gray(RGB);

    figure,imshow(GRAY); title('GRAY')

    threshold=graythresh(GRAY);

    BW=im2bw(GRAY,threshold);

    figure,imshow(BW); title('BW')

    BW=~BW;

    figure,imshow(BW); title('~BW')

    BW=bwmorph(BW,'thin',Inf);

    figure,imshow(BW); title('BWMORPH')

    [M,N]=size(BW);

    [H,T,R] = hough(BW);

    figure;

    plot(xy_long(:,1),xy_long(:,2),'LineWidth',2,'Color','cyan');

    k=(xy(2,2)-xy(1,2))/(xy(2,1)-xy(1,1));

    theta=pi/2+atan(k);

    if((xy(1,1)+xy(2,1))/2<=N/2)

    q=(theta+pi)*180/3.14;

    else

    q=theta*180/3.14;

    end

    shishu=q*6/2700-0.2;

    disp (theta);

    disp (q);

    disp (shishu);

    j=imread('1.jpg');

    x=RGB2gray(j);

    subplot(1,2,1);

    imshow(x);

    title('原图像');

    f=double(x);

    [m,n]=size(f);

    h=fspecial('gaussian',[25,25],80);%创建高斯模板

    q=imfilter(f,h,'same');

    s=log(f+0.03)-log(q+0.03);

    r=exp(s);

    %归一化处理

    max_r=max(r(:))*0.27;

    min_r=min(r(:));

    r=(r-min_r)/(max_r-min_r);

    index=find(r>1);

    r(index)=1;

    R=mat2gray(r);

    subplot(1,2,2);

    imshow(R);

    title('处理后的图像');

    G=im2bw(R,0.7);

    imshow(G);

    I=uint8(G);

    bw=edge(I,'sobel');

    imshow(bw);

    A=imread('1.jpg');

    I=rgb2gray(A);

    T=0.5*(double(min(I(:)))+double(max(I(:))));

    done=false;

    while ~done

    g=I>=T;

    Tnext=0.5*(mean(I(g))+mean(I(~g)));

    done=abs(T-Tnext)<0.5;

    T=Tnext;

    end

    J=I;

    K=find(J>=T);

    J(K)=255;

    K=find(J<T);

    J(K)=0;

    figure;

    subplot(1,2,1),imshow(I,[]),title('原始图像');

    subplot(1,2,2),imshow(J,[]),title('分割后图像');

    t1=clock;

    I=imread('1.jpg');

    subplot(1,2,1);

    J=rgb2gray(I);

    title('pso算法图像分割的结果');

    [a,b]=size(J);

    [p,x]=imhist(J,256);

    L=x';

    LP=p'/(a*b);

    n=256;

    c1=2;

    c2=2;

    wmax=0.9;

    wmin=0.4;

    G=10;

    M=15;

    X=min(L)+fix((max(L)-min(L))*rand(1,M));

    V=min(L)+(max(L)-min(L))*rand(1,M);

    m=0;

    for i=1:1:n

    m=m+L(i)*LP(i);

    endpbest=zeros(M,2);

    gbest1=0;

    gbest2=0;

    GG=0;

    t2=clock;

    for k=1:1:G

    w(k)=wmax-(wmax-wmin)*k/G;

    for i=1:1:M

    t=length(find(X(i)>=L));

    r=0;

    s=0;

    for j=1:1:t

    r=r+LP(j);

    s=s+L(j)*LP(j);

    end

    W0(i)=r;

    W1(i)=1-r;

    U0(i)=s/r;

    U1(i)=(m-s)/(1-r);

    end

    for i0=1:1:M

    BB(i0)=W0(i0)*W1(i0)*((U1(i0)-U0(i0))^2);

    end

    for i=1:1:M

    if pbest(i,2)<BB(i)

    pbest(i,2)=BB(i);

    pbest(i,1)=X(i);

    end

    end

    [MAX,CC]=max(BB);

    if MAX>=gbest2

    gbest2=MAX;

    gbest1=X(CC);

    end

    GG(k)=gbest2;

    for i=1:1:M

    V(i)=round(w(k)*V(i)+c1*rand*(pbest(i,1)-X(i))+c2*rand*(gbest1-X(i)));

    X(i)=V(i)+X(i);

    end

    end

    for i=1:1:a

    for j=1:1:b

    if J(i,j)>gbest1

    J(i,j)=250;

    else

    J(i,j)=0;

    end

    end

    end

    kk=1:1:G;

    gbest1;

    figure(1);

    imshow(J);

    figure(2);

    plot(kk,GG)

    tt=etime(clock,t1);

    end

    I=imread('1.jpg');

    tmin=min(I(:));

    tmax=max(I(:));

    th=(tmin+tmax)/2;

    ok=true;

    while ok

    g1=I>=th;

    g2=I<th;

    u1=mean(I(g1));

    u2=mean(I(g2));

    tnew=(u1+u2)/2;

    if abs(th-tnew)<1

    ok=0;

    end

    end

    th=tnew;

    th=floor(th);

    Inew=im2bw(I,th/255);

    subplot(1,2,1)

    imshow(I);

    title('原始图像');

    subplot(1,2,2)

    imshow(Inew);

    t=['迭代法分割后的图像,阈值=' num2str(th)];

    title(t);

    A0=imread('1.jpg');

    seed=[100,220];

    thresh=15;%相似性选择阈值

    A=rgb2gray(A0);

    A=imadjust(A,[min(min(double(A)))/255,max(max(double(A)))/255],[]);

    A=double(A);

    B=A;

    [r,c]=size(B);

    n=r*c;

    pixel_seed=A(seed(1),seed(2));

    q=[seed(1) seed(2)];

    top=1;

    M=zeros(r,c);

    M(seed(1),seed(2))=1;

    count=1;

    while top~=0;

    r1=q(1,1);

    c1=q(1,2);

    p=A(r1,c1);

    dge=0;

    if dge~=1

    B(r1,c1)=A(seed(1),seed(2));

    end

    if count>=n

    top=1;

    end

    q=q(2:top,:);

    top=top-1;

    end

    subplot(1,2,1),imshow(A,[]);

    subplot(1,2,2),imshow(B,[]);


    A0=imread('1.jpg');

    seed=[100,220];

    thresh=15;%相似性选择阈值

    A=rgb2gray(A0);

    A=imadjust(A,[min(min(double(A)))/255,max(max(double(A)))/255],[]);

    A=double(A);

    B=A;

    [r,c]=size(B);

    n=r*c;

    pixel_seed=A(seed(1),seed(2));

    q=[seed(1) seed(2)];

    top=1;

    M=zeros(r,c);

    M(seed(1),seed(2))=1;

    count=1;

    while top~=0;

    r1=q(1,1);

    c1=q(1,2);

    p=A(r1,c1);

    dge=0;

    if dge~=1

    B(r1,c1)=A(seed(1),seed(2));

    end

    if count>=n

    top=1;

    end

    q=q(2:top,:);

    top=top-1;

    end

    subplot(1,2,1),imshow(A,[]);

    subplot(1,2,2),imshow(B,[]);


    A0=imread('1.jpg');

    seed=[100,220];

    thresh=15;%相似性选择阈值

    A=rgb2gray(A0);

    A=imadjust(A,[min(min(double(A)))/255,max(max(double(A)))/255],[]);

    A=double(A);

    B=A;

    [r,c]=size(B);

    n=r*c;

    pixel_seed=A(seed(1),seed(2));

    q=[seed(1) seed(2)];

    top=1;

    M=zeros(r,c);

    M(seed(1),seed(2))=1;

    count=1;

    while top~=0;

    r1=q(1,1);

    c1=q(1,2);

    p=A(r1,c1);

    dge=0;

    for i=-1:1

    for j=-1:1

    if r1+i<=r & r1+i>0 & c1+j<=c & c1+j>0

    if abs(A(r1+i,c1+j)-p)<=thresh & M(r1+i,c1+j)~=1

    top=top+1;

    q(top,:)=[r1+i c1+j];

    M(r1+i,c1+j)=1;

    count=count+1;

    B(r1+i,c1+j)=1;

    end

    if M(r1+i,c1+j)==0;

    dge=1;

    end

    else

    dge=1;

    end

    end

    end

    if dge~=1

    B(r1,c1)=A(seed(1),seed(2));

    end

    if count>=n

    top=1;

    end

    q=q(2:top,:);

    top=top-1;

    end

    subplot(1,2,1),imshow(A,[]);

    subplot(1,2,2),imshow(B,[]);


    A0=imread('1.jpg');

    seed=[100,220];

    thresh=15;%相似性选择阈值

    A=rgb2gray(A0);

    A=imadjust(A,[min(min(double(A)))/255,max(max(double(A)))/255],[]);

    A=double(A);

    B=A;

    [r,c]=size(B);

    n=r*c;

    pixel_seed=A(seed(1),seed(2));

    q=[seed(1) seed(2)];

    top=1;

    M=zeros(r,c);

    M(seed(1),seed(2))=1;

    count=1;

    while top~=0;

    r1=q(1,1);

    c1=q(1,2);

    p=A(r1,c1);

    dge=0;

    end

    if dge~=1

    B(r1,c1)=A(seed(1),seed(2));

    end

    if count>=n

    top=1;

    end

    q=q(2:top,:);

    top=top-1;

    end

    subplot(1,2,1),imshow(A,[]);

    subplot(1,2,2),imshow(B,[]);

    展开全文
  • 基于Matlab的摆线轮齿廓修形参数的求解.pdf
  • 基于Matlab的避雷保护范围可视化研究.pdf
  • EARTH_COMPASS 地球坐标罗盘- 将绘图标签更改为 N、S、E、W 句法: EARTH_COMPASS(U, V) EARTH_COMPASS(U, V, LINESPEC) 输入: U:u 速度向量V:v 速度的向量可选的: LINESPEC:线路规格(即颜色)
  • 引子取整是常用的运算,结合一些背景就可以做很多好玩的事情,例如模拟投实验计算圆周率。部分内容用到了之前分享过的:2.取整在MATLAB中索引是常见操作,如果A是一个矩阵,那么A(1)就是取出矩阵A的第一个元素,...
  • matlab中inv的函数代码NeedMat,一种用于球形小Matlab软件包 描述 NeedMat提供了一个Matlab软件包,该软件包可实现快速的球状针刺变换和快速的球状针刺评估。 有关球形针头和包装的更多详细信息,请参阅技术报告...
  • 【表盘识别】基于Hough变换实现指针式仪表识别(倾斜矫正)matlab源码.zip
  • 基于MATLAB避雷保护范围可视化设计与分析基于MATLAB避雷保护范围可视化设计与分析摘要: 利用MATLAB设计避雷保护范围可视化程序与界面,对避雷保护范围采用折线法和滚球法进行对比分析,并对避雷保护范围...
  • 指针式仪表的智能读数,通过hough算法,实现指针式仪表的读数,含人机交互界面
  • Matlab模拟蒲丰投实验计算Π值

    千次阅读 2021-01-04 16:33:56
    实验结论6.Matlab代码 1.实验目的 通过仿真模拟实现蒲丰投实验来计算 πππ 值. 2.实验原理 (1)问题描述 平面上画着许多间距为aaa的平行线,随机地向此平面任投掷一长度为l(l<a)l(l<a)l(l<a)的NNN次,...
  • 博主最近在用MATLAB绘制柱形时遇到了一些问题。 比如说我想画出下面两组数据所占总数之和的百分比。 A=[5;20;17;29;52]; B=[62;12;3;48;33]; 我们可以使用下面的代码初步画出表示各个数百分比占比的柱形...
  • 基于matlab的小孔成像程序,u - u0 = fx*(xbar/zbar), v-v0 = fy*(ybar/zbar)
  • matlab图像倾斜校正

    千次阅读 2021-05-06 01:26:20
    4 图像颜色畸变校正介绍图像...如果用 Matlab 显示颜色畸变的图像 RGB 基色......Canny算 法也是 Matlab 高级程序语 言的图像处理工具 箱函数 提供 ...4 图像颜色畸变校正介绍 图像颜色畸变现象可以是由摄像器材导致...
  • matlab图像加密解密

    2021-04-22 11:39:55
    混沌序列 原始图像 重排列 序列 加密图像 1 算法示意 重排列 序列 混沌序列 解密图像 2 加密与解密算法的实现本 文借助MATLAB软件平台,使用MATLAB提供的文本 ...... ('Decrypted image contains data','...
  • matlab的绘图和可视化能力是不用多说的,可以说在业内是家喻户晓的。Matlab提供了丰富的绘图函数,比如ez**系类的简易绘图函数,surf、mesh系类的数值绘图函数等几十个。另外其他专业工具箱也提供了专业绘图函数,...
  • 基于Labview和Matlab的指针式仪表监控程序.pdf
  • 后面的代码只是 JFreeChart 在 Matlab 中使用它的可能性的演示。 我玩了一点使用我在网上找到的代码片段和 API 文档。 ( http://www.jfree.org/jfreechart/api/javadoc/index.html )。 当您想探索整个功能时, 我...
  • 基于matlab实现蒲丰投【附源码】

    千次阅读 2021-03-10 17:21:34
    %长 x=repmat([-0.5;8.5],1,9); y=repmat(linspace(0,8,9),2,1) line(x,y) hold on %固定图像框 n=1e5; %投次数 countNeedle=0; %记录与线相交次数,初始值为0 % 预分配内存,加快程序运行速度 needleXL=...
  • 通过此提交,您可以直接从计算机上运行的 MATLAB 访问移动设备的加速度计、磁力计、位置、方向和指南信息。 您可以访问当前和记录的传感器数据,并且可以使用 MATLAB 来可视化和分析移动传感器数据或根据获取的...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 1,428
精华内容 571
关键字:

matlab针图

matlab 订阅