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;
end
end
%%%%%%%%%%%%% 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;
else
q=theta*180/3.14;
end
shishu=q*6/2700-0.2;
disp (theta);
disp (q);
disp (shishu);