MATLAB指针读数识别系统

news2024/9/28 9:26:18
  1.  前言

   ①经过在工厂的实地测试,图像采集与传输装置可以正常工作,电脑端可以接收到清晰的图像,并且整个系统具有一定的的抗干扰的能力,在嘈杂的环境中亦可以实现其功能。

②通过matlab可实现图片的预处理以及指针识别读数识别,读取的数据相对准确

③通过labview可以成功的调用matlab函数,并实现函数的功能,通过labview搭建的界面,可以观测到实时的仪表读数以及仪表图像,可以观测到仪表读数在一段时间内的变化情况,并且可以实现连续的运行。

④整个系统的稳定性较高,可以实现持续的工作,对所处理的仪表图像的适应性较强。

在本次设计中,我学习了matlab,labview程序设计以及access的相关知识,学习了图像处理的相关方法,学会了更多解决问题、处理问题的方法,增强了处理问题的能力,为今后的发展奠定了良好的基础。

2、效果图

3、核心程序

附录一 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;

    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;

    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;

    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;

    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,[]);

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

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

相关文章

MySQL笔记(三):修改表

##注&#xff1a;需要在cmd管理员命令行链接mysql再打开sqlyog 一、基本介绍 二、CRUD&#xff08;[create][read][update][delete]&#xff0c;增删改查)语句 1、insert语句 &#xff08;添加数据&#xff09; insert into table_name(第一项&#xff0c;第二项&#xff0…

LeetCode(力扣)数组篇 JAVA刷题详解

1 简介 是不是有许多小伙伴在刷力扣的时候感觉无从下手&#xff1f;从头按顺序开始刷的童鞋们可能会比较有感触&#xff0c;为什么才第四题就感觉很难了?没关系&#xff0c;本文将对力扣的 1-500 题中不需要会员的数据结构与算法题目(数据库与 shell 除外)进行分类&#xff0…

Linux网络编程之dpdk的环境配置详解

文章目录 一、dpdk是什么&#xff1f;二、dpdk的环境配置多队列网卡是什么&#xff1f;怎么判断是否为多队列网卡&#xff1f;怎么修改成多队列网卡&#xff1f;修改内存配置&#xff0c;使其支持hugepage(巨页)下载dpdk编译dpdk 一、dpdk是什么&#xff1f; DPDK&#xff08;…

用苹果Vision Pro隔空操控机器人,英伟达:「人机合一」也不难嘛

昨日,英伟达创始人黄仁勋在 SIGGRAPH 2024 Keynote 演讲中讲到了其人形机器人通用基础模型「Project GR00T」。该模型在功能上迎来了一系列更新。 德克萨斯大学奥斯汀分校助理教授、英伟达高级研究科学家朱玉可发推,在视频中演示了英伟达如何将通用家务机器人大规模仿真训练…

(STM32笔记)十一、通过EXTI外部中断实现 按键控制LED

我用的是正点的STM32F103来进行学习&#xff0c;板子和教程是野火的指南者。 之后的这个系列笔记开头未标明的话&#xff0c;用的也是这个板子和教程。 十一、通过EXTI外部中断实现 按键控制LED 十一、通过EXTI外部中断实现 按键控制LED1、按键模块按键原理图按键程序思路 2、中…

【数据结构】mapset详解

&#x1f341;1. Set系列集合 Set接口是一种不包含重复元素的集合。它继承自Collection接口&#xff0c;所以可以使用Collection所拥有的方法&#xff0c;Set接口的实现类主要有HashSet、LinkedHashSet、TreeSet等&#xff0c;它们各自以不同的方式存储元素&#xff0c;但都遵…

Linux常用得操作命令

1.查看ip地址------ifconfig 2.在终端中输入该命令&#xff0c;可以查看当前所在位置------pwd 3.man和–help man命令 1.man命令可以查看某个命令得具体用法 2.man命令怎么翻页 空格 3.man命令按q退出 help命令------help&#xff0c;也可以查看一个命令的帮助&#xff0c…

JavaWeb基础2:XML/Tomcat/Servlet

JavaWeb基础2&#xff1a;XML/Tomcat/Servlet (qq.com)

vim编辑器的使用【vim常用指令介绍】

1.1 vim 简介 vim 编辑器最初是 vi 编辑器&#xff0c;vi 编辑器是 Unix 系统最初的编辑器。允许查看文件内容和在文件中移动、插入、编辑和替换文本。后来开发人员对它做了一些改进。并重命名为 vim。 1.2 学习 vim 的理由 因为几乎任何一个发行版都有 vi/vim 编辑器&#xf…

从手动到自动:WMS系统带来的仓储革命

仓库管理系统&#xff08;WMS&#xff0c;Warehouse Management System&#xff09;在仓储业的发展中扮演了至关重要的角色。它的演变从手动管理到自动化管理&#xff0c;不仅大提升了仓储效率&#xff0c;还改变了企业的运营模式。 一、手动管理阶段 在WMS系统普及之前&#…

nginx负载均衡及软件平滑升级!!!

一、负载均衡 早期的网站流量和业务功能都比较简单&#xff0c;单台服务器足以满足基本的需求&#xff0c;但是随着互联网的发展&#xff0c;业务流量越来越大并且业务逻辑也跟着越来越复杂&#xff0c;单台服务器的性能及单点故障问题就凸显出来了&#xff0c;因此需要多台服…

【Visual Studio Code】源代码管理 传入/传出 更改配置开关

July 2024 (version 1.92)版本更新的Visual Studio Code 增加了 【源代码管理 - 传入/传出】的可视化视图。 但是目前发现也会导致加载变慢 占用页面的影响&#xff0c;如果希望关闭该视图&#xff0c; 可以在设置里搜索 scm.showHistoryGraph 关闭即可

计网:从输入URL到网页显示期间发生了什么

1、URL包含的信息 我们输入的url中包含着一些信息&#xff1a; http&#xff1a;表示的此次我们使用的什么协议/www.baidu.com&#xff1a;表示的是我们想要访问的服务器名称&#xff0c;也就是域名dir3/home.html&#xff1a;表示我们所要访问的资源 2、通过DNS解析URL获得I…

JAVA中的JMM(Java 内存模型)详解

1.JMM概念 Java 内存模型&#xff08;Java Memory Model 简称JMM&#xff09;是一种抽象的概念&#xff0c;并不真实存在&#xff0c;指一组规则或规范&#xff0c;通过这组规范定义了程序中各个变量的访问方式。 因为在不同的硬件生产商和不同的操作系统下&#xff0c;内存的访…

嵌入式安全:Provencore Secure os

嵌入式安全有何独特之处? 嵌入式安全领域的领导者 ProvenRun 宣布,其旗舰产品 ProvenCore for ARM™ Cortex-A 最近获得了 通用标准 (CC) EAL7 认证。这是全球首创,因为没有其他操作系统或可信执行环境 (TEE) 达到该安全级别。相比之下,移动安全市场上第二安全的 TEE(对于…

版本控制案例:全球虚拟制片领导者Dimension借助Perforce Helix Core管理大型二进制文件,实现跨地域团队协作,简化制作流程(上)

创建虚拟世界和人类角色需要一系列的软件工具。但最终愿景很少是由单一工作室独立完成的。对于大型项目&#xff0c;工作室需要通力合作&#xff0c;将全球的团队成员和数字资产联合起来。 Dimension Studio——体积内容捕捉和虚拟制片领域的领导者——不断将新技术和新方法融…

传统产品经理 vs AI产品经理

随着科技的日新月异和技术的不断革新&#xff0c;AI技术如今已深度融入各行各业&#xff0c;使得身处此领域的产品经理们迎来了前所未有的新挑战与广阔机遇。以下是我精心整理的内容&#xff0c;旨在分享传统产品经理如何顺应时代洪流&#xff0c;成功转型为AI产品经理的策略与…

Java面试之操作系统

1、冯诺依曼模型 运算器、控制器、存储器、输入设备、输出设备 32位和64位CPU最主要区别是一次性能计算多少字节数据&#xff0c;如果计算的数额不超过 32 位数字的情况下&#xff0c;32 位和 64 位 CPU 之间没什么区别的&#xff0c;只有当计算超过 32 位数字的情况下&#…

中国篆刻孙溟㠭凿木《应无所住而生其心》

应无所住而生其心 弘一法师言&#xff1a;学佛不是让你出家&#xff0c;也不是让你变得与众不同。学佛就是一个正常生活的人&#xff0c;一个善良的人懂得用佛法降服自心&#xff0c;消除烦恼所有有皆是虚妄&#xff0c;若见诸相非相&#xff0c;即见真我。 孙溟㠭凿木《应无…

Vue3发送验证码,开启倒计时,并且倒计时结束前无法点击

目录 1.最终效果 2.HTML 3.JS 1.最终效果 先看效果&#xff0c;点击发送验证码&#xff0c;然后开启倒计时&#xff0c;倒计时结束前无法再次发送&#xff0c;并且该按钮处于无法选中状态 废话少说&#xff0c;上干货&#xff0c;直接看代码 2.HTML 按钮部分内容&#xf…