matlab图像检测处理——图形检测
本博客仅仅是因为自己经常忘记,记笔记而已
常用操作:
1、二值化
clc
A=imread('a.jpg'); %读取到一张图片
thresh = graythresh(A); %自动确定二值化阈值
I2 = im2bw(A,thresh); %对图像二值化
figure(1)
imshow(A) %显示二值化之前的图片
figure(2)
imshow(I2) %显示二值化之后的图片
thresh是二值化的阈值,可以自己确定大小,在0到1之间.
2、边缘检测
边缘检测常用的五种
1、Robert算子边缘检测
BW1=edge(I,'Roberts',0.16);
imshow(BW1);
2、Sobel算子边缘检测
BW2=edge(I,'Sobel',0.16);
imshow(BW2);
3、Prewitt算子边缘检测
BW3=edge(I,'Prewitt',0.06);
imshow(BW3);
4、LOG算子边缘检测
BW4=edge(I,'LOG',0.012);
imshow(BW4);
5、Canny算子边缘检测
BW5=edge(I,'Canny',0.35);
imshow(BW5);
简单常用圆检测:imfindcircles
例;[c,r]=imfindcircles(image,[circles1,circles2]),image为检测图像矩阵,circles1,circles2分别是圆检测的半径,即确定可检测圆半径范围。注意:当圆检测半径范围较大时会拖慢程序速度。
检测到圆后可在图像中直接画出对应的圆及圆心:viscircles(c, r,’EdgeColor’,’b’);其中c是圆心坐标,r是圆半径,‘EdgeColor’,‘b’分别是画圆的参数。
[c,r]=imfindcircles(image,[circles1,circles2]);
figure
imshow(image)
viscircles(c, r,'EdgeColor','b');
连通域检测常用函数
bwlabel ;regionprops
[B,L]=bwlabel(B0);
img_reg = regionprops(B, 'all');
img_regb便是闭合区域的结构体,里面最常用的是Centroid:闭合区域质心;BoundingBox:矩形边界;PixelList连通域坐标
连通域边界检测
[B,L] = bwboundaries(image)
1.B是一个 P x 1 的数组,其中P代表连通体的个数.B内每一行是一个 Q x 2 的矩阵,Q内每一行表示连通体的边界像素的位置坐标(第一列是纵坐标Y,第二列是横坐标X),Q为边界像素的个数.
2.L是一个标记矩阵.