img= imread('2.jpg');%读取图像
imagebeffor=rgb2gray(img);%转为灰度图像
figure;
imshow(image); title('滤波后的图像');%显示图像
level=graythresh(image);%计算全局阈值
imageth=im2bw(image,level);%二值化
figure;
imshow(imageth); title('圆检测图像--二值化');%显示图像
axis on
xlabel x
ylabel y%画坐标
Rmin = 50;%搜索的圆最小半径
Rmax = 300;%搜索的圆最大半径
[centersBright, radiiBright] = imfindcircles(imageth,[Rmin Rmax],'ObjectPolarity','bright','Sensitivity',0.95);
viscircles(centersBright, radiiBright,'EdgeColor','b');%画出圆
viscircles(centersBright, 0.5*radiiBright,'EdgeColor','b');%画出搜索指针路径
viscircles(centersBright, 1,'EdgeColor','b');%画圆心
locationx=0;
locationy=0;
count=0;
angle=0;
for j=0:0.05:2*pi
x=centersBright(2)+0.5*radiiBright*cos(j);
y=centersBright(1)+0.5*radiiBright*sin(j);
x=int32(x);
y=int32(y);
if imageth(x,y)==1%如果遇到白色区域,即为指针位置
viscircles([y,x], 1,'EdgeColor','g');
locationx=locationx+x;
locationy=locationy+y;
count=count+1;
angle=angle+j;
end
if j==0
viscircles([y,x], 1,'EdgeColor','g');
end
end
locationx=locationx/count;
locationy=locationy/count;
angle=angle/count;
viscircles([locationy,locationx], 1,'EdgeColor','r');%画出指针位置
figure;
imshow(img); title('原图像');%显示原图像
figure;
imshow(image); title('灰度图像');%显示灰度图像
figure;
imshow(imageth); title('二值化图像');%显示二值化图像
value=(360/(1.5*pi))*(7.0/4.0*pi-angle)%读取的仪表盘数据
提取仪表盘指针位置
最新推荐文章于 2024-06-07 11:20:26 发布