MATLAB霍夫曼表盘识别系统
MATLAB霍夫曼表盘识别系统
一、介绍
本设计为基于MATLAB的表盘指针识别,算法原理是基于hough变换。可检测压力表,石英手表,电表刻度,气压表等带指针刻度的表盘。通过hough检测直线和圆的关系,得出指针夹角,根据刻度换算关系得出具体刻度值。算法流程为:原图,灰度变换,二值化,hough变换,刻度指针处刻度定位,计算夹角,得出示数。本设计带有一个人机交互GUI界面,操作人性化,逻辑清晰。
二、运行图
三、核心代码
RGB=imread('14.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;
imshow(H,[],'XData',T,'YData',R,'InitialMagnification','fit');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');
%%%%%%%%%%%%%%%%%%%% Find lines and plot them%%%%%%%%%%%%%%for k = 1:length(lines)xy = [lines(k).point1; lines(k).point2];plot(xy(:,1),xy(:,2),'LineWidth',2,'Color','green');
%%%%%%%%%% plot beginnings and ends of lines%%%%%%%%%%%%%%%%%%plot(xy(1,1),xy(1,2),'x','LineWidth',2,'Color','yellow'); plot(xy(2,1),xy(2,2),'x','LineWidth',2,'Color','red');
%%%% determine the endpoints of the longest line segment %%%%len = norm(lines(k).point1 - lines(k).point2);if ( len > max_len)max_len = len;xy_long = xy;endend
%%%%%%%%%%%%% highlight the longest line segment%%%%%%%%%%%%%%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; elseq=theta*180/3.14; endshishu=q*6/2700-0.2;disp (theta);disp (q);disp (shishu);