MATLAB图像处理(一) | 您所在的位置:网站首页 › 形状对比图片作业 › MATLAB图像处理(一) |
MATLAB图像处理(一)——计算机图形学之图像形状识别
由于遇到了很多次这个课题,这次做完之后结合手上的资料总结一下。 基本步骤: 1、读取彩色图像转化为二值图像; 2、确定图像中的形状边界; 3、确定所需形状的目标;本文主要通过识别圆形目标来进行说明,原图如下所示,本例需要识别出下图中的圆形物体: 1) 读取彩色图像 % 1、读取图像并转化为二值图像 RGB = imread('ImageSeg.png'); figure;imshow(RGB);title('原图像');2)将彩色图像转化为二值图像 % 转化为灰度图像 I = rgb2gray(RGB); % 设置阈值 threshold = graythresh(I); % 转化为二值图像 bw = im2bw(I,threshold);注意:如果使用阈值公式进行转化,转化出的效果如果不符合预期的话需要手动调整阈值,上面代码的效果如下:
去噪之后的二值图像为: 结果为 首先去除小目标,由于本例图像中不存在小目标,所以可省略该步骤,其次进行孔洞填充并进行白色描边,最后通过bwboundaries函数确定图像边界。 % 去除小目标,因为本图没有小目标,所以可以不需要本条语句 bw = bwareaopen(bw,30); % 图形学结构元素构建,圆形 se = strel('disk',8); % 关操作 bw = imclose(bw,se); % 填充孔洞 bw = imfill(bw,'holes'); % 二值化图像显示 figure(1);imshow(bw);title('二值图像'); [B,L] = bwboundaries(bw,'noholes'); figure(2);imshow(label2rgb(L,@jet,[.5 .5 .5])); hold on; for k = 1:length(B) boundary = B{k}; % 显示白色边界 plot(boundary(:,2),boundary(:,1),'w','LineWidth',2) end确定圆形目标,求取图形周长,圆心,面积,人为设置阈值进行过滤,在这里我设置阈值为0.85,即形状比对大于这个阈值的就是我们所需要的目标物体。 hold on; % 确定圆形目标 stats = regionprops(L,'Area','Centroid'); % 设置求面积 threshold = 0.85; for k = 1:length(B) boundary = B{k}; delta_sq = diff(boundary).^2; % 求周长 perimeter = sum(sqrt(sum(delta_sq,2))); % 求面积 area = stats(k).Area; metric = 4*pi*area/perimeter^2; metric_string = sprintf('%2.2f',metric); % 根据阈值匹配 if metric > threshold centroid = stats(k).Centroid; plot(centroid(1),centroid(2),'ko'); text(centroid(1)-2,centroid(2)-2, '这是圆形','Color',... 'k','FontSize',14,'FontWeight','bold'); end text(boundary(1,2)-10,boundary(1,1)-12, metric_string,'Color',... 'k','FontSize',14,'FontWeight','bold'); end title('图像形状识别')最后识别的效果图为: |
CopyRight 2018-2019 实验室设备网 版权所有 |