图像处理 怎么识别三角形

2017-01-17 15:05:48 wangs0622 阅读数 14410
  • 程序打包安装运行

    1、掌握Raspberry Pi的使用; 2、具备树莓派的网站建站技术; 3、具备基于树莓派的物联网开发技术; 4、基于Raspberry的人脸识别与检测实践;

    14人学习 张晨光
    免费试看

这是我自己做作业的时候写的一点东西,判断一张图片中的形状(图片如下,放到其他图片的话可能就不适用了),所以仅供参考,自己水平确实比较低,希望大家不喜勿喷~

我们使用的图片如下:

这里写图片描述
结果如下:
这里写图片描述

下面稍微介绍一下我自己的处理方法:
1.首先是将彩色变灰度。
2.因为图片含有边框,所以首先对边框进行处理,将边框去除。 去除后的图形如图3. 可以看到边上的圆有点变形,不过不影响形状的判断,
只是会影响质心位置的计算。
这里写图片描述
3. 为了计算质心。 先对图形进行边缘提取,然后计算每块区域所有点的位置坐标平均值,即质心坐标
4.计算每块区域边缘点到质心的距离,进行曲线拟合。根据极点的数目判断图形的形状。
5.把区域的形状标在图片中

我的matlab代码


f4=imread('Project2016.jpg');     %读取图像 
imshow(f4)
a=rgb2gray(f4);          %将彩色图像转换成灰度图像
a_size = size(a);
b = ones(a_size);

for i =1:a_size(1)
    for j = 1:a_size(2)
        if a(i,j)>=0 && a(i,j)<=50
            b(i,j)=0;
        end
    end
end



B =[1 1 1 1;1 1 1 1;1 1 1 1;1 1 1 1];  %此模板的选择有待再考虑
b = imerode(b,B);

for i =1:a_size(1)
    for j = 1:a_size(2)
        if  b(i,j)==0
            a(i,j)=255;
        end
    end
end
imshow(a)

bw=edge(a,'prewitt');     %边缘检测   边缘检测结束后发现还是有一些鼓励的小点,不多它们没有形成闭合的曲线
[L,num] = bwlabel(bw);               %这里已经给每个区域标好号了,使用bwlabel的话会把鼓励的不成闭合曲线的点也算进去
%一些独立点的像素数量是比较少的,所以可以通过检测每一块区域的像素点大小来决定是不是要删除此像素块
for i= 1:num
        [r,c]=find(L==i);
        size_L = size([r,c]);
        if size_L(1,1)<30
            L(r,c)=0;
        end
end
L = logical(L);

se = strel('disk',4);   %创造一个平坦的圆盘型结构元素,其半径为2
L = imclose(L,se);    %关闭图像
[L,num1] = bwlabel(L);
L = rot90(L,3);
L = fliplr(L);
pixel = cell([num1,1]);
centre = zeros(num1,2);
size_L = size(L);
for i=1:num1

    [r,c]=find(L==i);
    pixel{i} = [r,c]; 
    hold on
    mean_pixel = mean(pixel{i});
    centre(i,:) = mean_pixel;         
    plot(mean_pixel(1,1),mean_pixel(1,2),'r*')
    size_r = size(r);
    distance = zeros(size_r);
    for j = 1:1:size_r(1)
            distance(j) = sqrt((r(j)-mean_pixel(1))^2 + (c(j)-mean_pixel(2))^2);
    end
    p=polyfit((1:size_r(1))',distance,7);
    x = (1:size_r(1))';
    y = p(1)*x.^7 + p(2)*x.^6 + p(3)*x.^5 + p(4)*x.^4 + p(5)*x.^3 + p(6)*x.^2 + p(7)*x.^1 + p(8);
    %plot(x,y)            %对数据进行拟合,因为数据过于杂乱,不好判断    
    min_distance = min(distance);
    max_distance = max(distance);
    min_y        =  min(y);
    max_y        =  max(y);
    num_peaks    =  size(findpeaks(-y));
    if (max_distance - min_distance)<= 15 && (max_y - min_y) <= 15
        text(mean_pixel(1,1),mean_pixel(1,2),sprintf('圆形  %d',i))
    elseif num_peaks(1) == 2
        text(mean_pixel(1,1),mean_pixel(1,2),sprintf('三角形  %d',i))    
    else
        text(mean_pixel(1,1),mean_pixel(1,2),sprintf('矩形  %d',i))
    end    
end

%}

我的博客: www.wangs0622.com

2019-07-18 14:25:35 YueYingGuang 阅读数 9016
  • 程序打包安装运行

    1、掌握Raspberry Pi的使用; 2、具备树莓派的网站建站技术; 3、具备基于树莓派的物联网开发技术; 4、基于Raspberry的人脸识别与检测实践;

    14人学习 张晨光
    免费试看

MATLAB图像处理(一)——计算机图形学之图像形状识别

由于遇到了很多次这个课题,这次做完之后结合手上的资料总结一下。

基本步骤:

1、读取彩色图像转化为二值图像;

2、确定图像中的形状边界;

3、确定所需形状的目标;

本文主要通过识别圆形目标来进行说明,原图如下所示,本例需要识别出下图中的圆形物体:
在这里插入图片描述

1、读取彩色图像转化为二值图像

针对图像中可能有不同形状的目标物体,为了进行目标筛选,可以先通过形状判断,过滤掉我们不需要的物体,极大地提高图像识别的效率。

1) 读取彩色图像

% 1、读取图像并转化为二值图像
RGB = imread('ImageSeg.png');
figure;imshow(RGB);title('原图像');

2)将彩色图像转化为二值图像

% 转化为灰度图像
I = rgb2gray(RGB);
% 设置阈值
threshold = graythresh(I);
% 转化为二值图像
bw = im2bw(I,threshold);

注意:如果使用阈值公式进行转化,转化出的效果如果不符合预期的话需要手动调整阈值,上面代码的效果如下:
在这里插入图片描述
所以我们根据图像像素的特性人为调整阈值。

bw = im2bw(I,0.69);

在这里插入图片描述
调整后的二值图像如上图所示,可以看到物体形状非常清晰,但是明显看到背景有许多噪点,所以在这里为了去除这些噪点我们进行了人工去噪,去噪的代码如下,即简单的领域判断。

% 通过领域判断手动去噪
[m,n] = size(bw);
for i = 2:m-1
   for j = 2:n-1
       %同上下元素判断       
       if(bw(i,j)~=bw(i+1,j) && bw(i,j)~=bw(i-1,j))
           bw(i,j) = 1;
       %同左右元素判断
       elseif(bw(i,j)~=bw(i,j+1) && bw(i,j)~=bw(i,j-1))
           bw(i,j) = 1;
       %同斜边元素判断
       elseif(bw(i,j)~=bw(i+1,j+1) && bw(i,j)~=bw(i-1,j-1))
           bw(i,j) = 1;
       %同斜边元素判断
       elseif(bw(i,j)~=bw(i-1,j+1) && bw(i,j)~=bw(i+1,j-1))
           bw(i,j) = 1;
       end
   end
end

去噪之后的二值图像为:
在这里插入图片描述
然后对以上图像进行取反,以备下面使用。

for i = 1:m
    for j = 1:n
        bw(i,j) = ~bw(i,j);
    end
end

结果为
在这里插入图片描述

2、确定图像中的形状边界

首先去除小目标,由于本例图像中不存在小目标,所以可省略该步骤,其次进行孔洞填充并进行白色描边,最后通过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

在这里插入图片描述

3、确定所需形状的目标

确定圆形目标,求取图形周长,圆心,面积,人为设置阈值进行过滤,在这里我设置阈值为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('图像形状识别')

最后识别的效果图为:
在这里插入图片描述
源代码及所使用的文件链接:https://download.csdn.net/download/yueyingguang/11381702

2016-08-13 12:07:15 gx_489587482 阅读数 12928
  • 程序打包安装运行

    1、掌握Raspberry Pi的使用; 2、具备树莓派的网站建站技术; 3、具备基于树莓派的物联网开发技术; 4、基于Raspberry的人脸识别与检测实践;

    14人学习 张晨光
    免费试看

步骤如下:


0.通过摄像头或是加载图片的方式获取到源图;
1.将RGB图像转为HSV图像并取H通道的图片进行处理;
2.调节HSV的值,通过getStructuringElement函数去除一些噪点,通过morphologyEx函数连接一些连通域;
3.通过第2步的操作得到只保留与目标形状相近部分的图片;
4.通过cvFindContours函数检测所有轮廓;
5.通过GetAreaMaxContour函数找到最大的轮廓;
6.如果是圆,通过cvDrawContours函数画出轮廓;如果是矩形或是三角形,通过cvApproxPoly函数进行多边形逼近;
7.如果是圆的话,用handlecicle函数进行识别,参数根据实际图片进行调节。矩形与三角形的判断方法可参考网上的,网上有!


注意事项:
A.本人使用OPENCV中的cvQueryFrame函数时,发现是摄像头的上一张图片,第二次才是当前图片,在查了很多资料未果的情况下,我只能调用两次cvQueryFrame函数,有解决方法的可以给我留言,感谢!
B.慎用CvMemStorage函数,每次调用都会申请内存的,要记得通过cvReleaseMemStorage函数释放,不然会导致内存不断增加。
2017-06-08 10:07:00 weixin_30788731 阅读数 546
  • 程序打包安装运行

    1、掌握Raspberry Pi的使用; 2、具备树莓派的网站建站技术; 3、具备基于树莓派的物联网开发技术; 4、基于Raspberry的人脸识别与检测实践;

    14人学习 张晨光
    免费试看

按照应用目的分类(物体识别、数据挖掘、恢复、分割)、按图像种类分类(普通图像、遥感图像)

常用的图像处理算法:数字图像处理基础、遥感数字图像处理、机器视觉、计算机视觉

图像处理程序:C++ OpenCV、Matlab与图像处理

 

1. 数字图像处理-概述

其实,造成“不可能图形”(三角形的三个角都是90°)的并不是图形本身,而是你对图形的三维知觉系统,这一系列在你知觉图形的立体心理模型时强制作用。在把二维平面图形知觉为你三维立体心理图形时,执行这一过程的机制会极大地影响你的视觉系统。

正是在这一强制执行的机制的影响下,你的视觉系统对图形中的每一个点都赋予了深度。换句话说,一幅图像的某些二维结构元素和你三维知觉解释系统的某些结构元素相对应。二维直线被解释成三维直线。二维的平面被解释为三维的平面。在透视图像中,锐角和钝角都被解释为90°角。外面的线段被看作是外形轮廓的分界线。这一外形分界线在你定义整个心理图像的外形轮廓时起着及其重要的作用。这说明,在没有相反信息的影响下,你的视觉系统总是假定你从一个主要视角观看事物。

三角形的每一个顶角都产生透视,三个90°的角,而且,每条边的距离变化不同。把三个顶角合成一个整体,就产生了一个空间不可能图形。

相对性:环境对比的影响 

 

计算机视觉的发展历史:

1950s:二维图像分析和识别,如光学字符识别,工件表面、显微图片和航空图片的分析和解释等。是模式识别的重要内容。

1960s:MIT的Roberts通过计算机程序从数字图像中提取出诸如立方体、楔形体、棱柱体等多面体的三维结构,并对物体形状及物体的空间关系进行描述.这项研究开创了以理解三维场景为目的的三维计算机视觉的研究.Roberts对积木世界的创造性研究给人们以极大的启发,许多人相信,一旦由白色积木玩具组成的三维世界可以被理解,则可以推广到理解更复杂的三维场景.

1970s:出现了一些视觉应用系统.

   -70年代中期,麻省理工学院(MIT)人工智能(AI)实验室正式开设“计算机视觉” ( Machine Vision) 课程,由B.K.P.Horn教授讲授.

   -David Marr教授于1973年应邀在MIT AI 实验室领导一个以博士生为主体的研究小组,1977年提出了不同于“积木世界”分析方法的计算视觉理论.

1980s:Marr理论成为计算机视觉研究领域中的一个十分重要的理论框架.(ICCV, Marr奖)

    计算机视觉获得蓬勃发展,新概念、新方法、新理论、新应用不断涌现,比如,基于感知特征群的物体识别理论框架,主动视觉理论框架,视觉集成理论框架等.

 

Marr模型

80年代初,Marr首次从信息处理的角度综合了图像处理、心理物理学、神经生理学及临床神经病理学的研究成果,提出了第一个较完备的视觉系统框架。

Marr将系统分为基元图、2.5维图(部分的、不完整的三维信息,缺少深度信息)和三维模型三个层次来表达视觉信息的处理过程,而每层的表达将适当的信息明朗化。

 

 

基元图:使亮度变化(边沿)的信息明朗化,如角点、边缘、纹理、线条、边界等基本特征。

2.5维图:使表面朝向的信息明朗化,如场景可见部分的深度、法线方向、轮廓等。

三维模型:物体的形状与空间位置信息明朗化。

优点:系统地阐述了用二维图像恢复三维物体的可能性和一般性方法。

缺点:没有考虑视觉本身具有的反馈机制和不同层次的处理力度。

 

计算机视觉(Computer Vision)与相关学科的关系

- 图像处理 (Image Processing) 图像处理通常是把一幅图像变换成另外一幅图像,也就是说,图像处理系统的输入是图像,输出仍然是图像,信息恢复任务则留给人来完成。

- 计算机图形学 (Computer Graphics) 通过几何基元,如线、圆和自由曲面等,来生成图像,属于图像综合,它在可视化(Visualization)和虚拟现实(Virtual Reality)中起着很重要的作用.计算机视觉正好是解决相反的问题,即从图像中估计几何基元和其它特征,属于图像分析.

- 模式识别 (Pattern Recognition) 研究分类问题,确定符号、图画、物体等输入对象的类别.强调一类事物区别于其它事物所具有的共同特征。一般不关心三维世界的恢复问题。

- 人工智能 (Artificial Intelligence) 涉及到智能系统的设计和智能计算的研究.在经过图像处理和图像特征提取过程后,接下来要用人工智能方法对场景特征进行表示,并分析和理解场景.

- 媒体计算 (Multimedia Computing) 文字\图形\图像\动画\视频\音频等各类感觉媒体的共性基础计算理论、计算方法,以及媒体系统实现技术。以实现下一代计算机能听、能看、会说、会学习为目标。

- 认知科学与神经科学 (Cognitive science and Neuroscience) 将人类视觉作为主要的研究对象.计算机视觉中已有的许多方法与人类视觉极为相似.许多计算机视觉研究者对研究人类视觉计算模型比研究计算机视觉系统更感兴趣,希望计算机视觉更加自然化,更加接近生物视觉

 

图信号处理层次

-图像处理:图像采集、储存;图像重建;图像变换、增强、恢复、校正;图像(视频)压缩编码。

-图像分析:边缘检测、图像分割;目标表达、描述;目标颜色、形状、纹理、空间和运动分析;目标检测、识别。

-图像理解:图像配准、融合;3-D表示、建模、场景恢复;图像感知、解释、推理;基于内容的图像和视频检索。

 

计算机视觉技术的应用

-工业领域(生产装配、质量检验)

-机器人(星球探测机器人)

-遥感图像分析(植被分析)

-医学图像分析(骨骼定位)

-安全鉴别、监视与跟踪(门禁系统、视频监控)

-国防系统(目标自动识别与目标跟踪)

-图像与视频检索(基于内容的检索)

-文物保护(数字博物馆)

-其他(游戏、动画、体育、人机交互)

-......

 

 

 

 

Learning OpenCV:http://www.cnblogs.com/2008nmj/p/6133737.html

转载于:https://www.cnblogs.com/2008nmj/p/6961405.html

2016-03-23 21:41:25 wakatipu 阅读数 2432
  • 程序打包安装运行

    1、掌握Raspberry Pi的使用; 2、具备树莓派的网站建站技术; 3、具备基于树莓派的物联网开发技术; 4、基于Raspberry的人脸识别与检测实践;

    14人学习 张晨光
    免费试看

刚开始认真接触数字图像处理,来了解一下数字图像处理的一个特别大体的框架。

1. 概论

数字图像处理的主要内容:

1⃣️ 图像获取、表示和表现;2⃣️ 图像复原;3⃣️ 图像增强;4⃣️ 图像分割;5⃣️ 图像分析;6⃣️ 图像重建;7⃣️ 图像压缩编码

2. 数字图像基础

2.1 图像的采样与量化;

2.2 空间分辨率(dpi)和灰度分辨率(位数);

2.3 颜色模型(RGB,HSI,YUV,HSV,CHL,LAB,CMY,XYZ)

1⃣️ RGB:Red Green Blue (0,0,0)为黑色,(1,1,1)为白色

2⃣️ HSI:Hue(色调,用角度表示,0°红色,120°绿色,240°蓝色) Saturation(色饱和度,用半径长度表示,S=0最暗,S=1最鲜明)       Intensity(亮度,高度表示,I=0黑色,I=1白色)

3⃣️ YUV:Y表示颜色亮度,U、V表示蓝色、红色的色度

2.4 BMP 文件:位图文件头(14字节),位图信息头(40字节),颜色表(不确定),位图数据

3. 灰度图像处理

3.1 彩色图像灰度化:分量法;平均值法;最大值法;加权平均法

3.2 灰度变换 : 反转变换;幂律变换;分段线性变换

3.3 直方图处理

3.4 空间滤波处理

1⃣️ 平滑空间滤波器:均值滤波器;高斯滤波器;中值滤波器;K近邻均值滤波器

2⃣️ 锐化空间滤波器:一阶微分(梯度,交叉梯度-Roberts,Sobel算子,Prewitt算子);二阶微分(拉普拉斯算子)

3.5 灰度投影:积分投影;微分投影。人眼水平位置和垂直位置定位

3.6 图像的分割

3.7 图像的匹配

4. 彩色图像处理

4.1 颜色模型转换

4.2 彩色变换:补色处理;分段线性变换;彩色图像的直方图均衡化

4.3 彩色图像的空间滤波处理

1⃣️ 图像的模糊处理:平滑处理(水平平滑,垂直平滑,四周平滑);镶嵌处理;扩散处理

2⃣️ 边缘锐化处理:霓虹处理(可用灰度图像处理中的梯度,交叉梯度,Sobel算子分别处理RGB三个分量);浮雕处理(梯度)

5. 图像几何变换

5.1 平移变换

5.2 镜像变换:水平镜像;垂直镜像

5.3 旋转变换:正变换;逆变换;绕任意点旋转正变换

5.4 比例变换:缩小变换(正,逆);放大变换(正,逆)

5.5 变形变换:按照指定函数进行相应的变换

6. 二值图像处理

7. 图像频域变换

由于直接在空域对图像进行处理的计算量很大,因此采用各种图像变换的方法,将空域的计算转换到频域的计算。图像的变换把图像变成了数据。

7.1 傅里叶变换(Fourier Transform

1⃣️ 连续函数的傅里叶变换

2⃣️ 数字图像用离散傅里叶变换(Discrete Fourier Transform, DFT)

取傅里叶变换后的直流中心低频区域,过滤掉四周高频区域(用0代替),可以达到平滑图像的效果,也称为低通滤波器。低频区域的选择不同就有不同的低通滤波器,如理想低通滤波器、高斯低通滤波器、布特沃斯低通滤波器等。

过滤掉傅里叶变换后的直流中心低频区域,四周高频区域,可以达到锐化图像的效果,也称为高通滤波器。高频区域的选择不同就有不同的高通滤波器,如理想通滤波器、高斯通滤波器、布特沃斯通滤波器等。

3⃣️ 快速傅里叶变换(Fast Fourier Transform):蝶形运算

7.2 离散余弦变换(Discrete Cosine Transform, DCT)

语音信号、图像信号的变换的准最佳变换;有一维变换和二维变换;经过余弦变换,主要信息集中在少量的左上角附近位置处。余弦变换也可用于图像压缩。

7.3 离散沃尔什-哈达玛变换

7.4 小波变换

与基函数为正弦函数的傅里叶变换不同,小波变换基于一些小型波,简称小波,它具有变化的频率和有限的持续时间。傅里叶变换只有频率信息,没有时间信息。

8. 图像压缩编码

1⃣️ 无损压缩编码:

     霍夫曼(Huffman)编码:频繁使用的数据用较短的二进制码代替,较少使用的数据用较长的二进制码代替,每个数据的代码各不相同

     行程编码(Run Length Coding):在一个逐行存储的图像中,具有相同灰度值的一些像素组成的序列,成为行程。因此对于每一个行程,只存储行程中的灰度值和行程长度即可,而不必将相邻的同样的灰度值存储多次。

     LZW(Lempel-Ziv & Welch)编码,即字串表编码。

     熵编码法

     香农-范诺(Shannon-Fannon)编码:符号的码字长度由该符号出现的概率来决定     

     算术编码:信源概率统计的固定编码模式;针对未知信源的自适应模式。

2⃣️ 有损压缩编码:

     JPEG(Joint Picture Expert Group)压缩编码

     变换编码

9. 图像合成处理

9.1 图像噪声:高斯噪声;均匀噪声;脉冲(椒盐)噪声

9.2 图像水印:可见水印;不可见水印

9.3 图像相减

10. 图像复原

10.1 图像退化/复原模型

10.2 有噪声的图像复原

1⃣️ 均值滤波法:算术均值滤波;几何均值滤波;谐波均值滤波;逆谐波均值滤波

2⃣️ 统计排序滤波法:中值滤波器;最大值和最小值滤波器;中点滤波器

10.3 几何畸变校正:空间几何坐标变换;三角形线性法;灰度值的确定


空间域处理:

1⃣️ 点处理:图像灰度变换,直方图均衡

2⃣️ 邻域处理:线性、非线性平滑和锐化

频率域处理:高、低通滤波,同态滤波


频域与空域滤波的比较:

1. 对具有同样大小的空域和频率滤波器:h(x,y), H(u,v),频域计算(由于FFT)往往更有效(尤其是图像尺寸比较大时)。但对在空域中用尺寸较小的模板就能解决的问题,则往往在空域中直接操作。

2. 频域滤波虽然更直接,但如果可以使用较小的滤波器,还是在空域计算为好 。因为省去了计算傅立叶变换及反变换等步骤。

3. 由于更多的直观性,频率滤波器设计往往作为空域滤波器设计的向导。



参考资料

1. Visual C++数字图像处理   陆玲 李金萍 中国电力出版社

2. http://blog.csdn.net/hitwengqi/article/details/8292675

3. http://blog.csdn.net/byxdaz/article/details/4375228