精华内容
下载资源
问答
  • matlab中如何提取边缘轮廓的坐标
    千次阅读 热门讨论
    2020-03-30 21:35:01

    matlab中如何提取边缘轮廓的坐标

    已用形态学提取方法提取的边缘轮廓,现在相求的矩形边缘的长度和宽度,或者求出四个角的坐标,请大神指点
    已用形态学提取方法提取的边缘轮廓,现在相求的矩形边缘的长度和宽度,或者求出四个角的坐标,请大神指点

    更多相关内容
  • MATLAB坐标提取

    2018-12-11 17:04:37
    基于MATLAB图像处理技术的,二值化图像边缘提取,能方便的提取出二值化图像的边缘,并以坐标点的形式存储,后续应用。基于MATLAB图像处理技术的,二值化图像边缘提取,能方便的提取出二值化图像的边缘,并以坐标点的...
  • Matlab实现碳纤维边缘提取并输出坐标

    千次阅读 多人点赞 2020-08-09 18:26:26
    Matlab实现碳纤维边缘提取并输出坐标 一、 图像处理算法流程 1. 读取图片: image = imread(‘1.jpg’),在Matlab中,常用于读取图片的函数为imread()。 2. 转换为灰度图 读取的图片可能为彩色图片,也有可能...

    一、 图像处理算法流程

    图像处理算法流程

    1. 读取图片:

    image = imread(‘1.jpg’),在Matlab中,常用于读取图片的函数为imread()。
    在这里插入图片描述

    2. 转换为灰度图

    读取的图片可能为彩色图片,也有可能是黑白的灰度图片。灰度图片可直接进行处理,彩色图片需要用rgb2gray()函数转换为灰度图片才能够继续处理。
    在这里插入图片描述

    3. 增强对比度(选择性使用)

    使用直方图均衡化函数histeq()来增强图像的对比度,这个函数只有在图像整体偏暗或图像整体偏亮的条件下才使用,如果图像质量较好则不需要使用。
    其中image_gray = histeq(image_gray,6)中参数6表示对比度增强的程度。

    4. 二值化处理

    实现二值化处理的函数为im2bw( ,thresh)。二值化处理需要设定一个阈值,图片中小于阈值(thresh)的设为像素值全部设为0,大于阈值(thresh)的像素值全部设为1。
    阈值的选定可采用graythresh()函数来实自动选定阈,也可以根据自己对数据的观察和分析,手动设定阈值,thresh取值范围为0~1。
    例:手动设置阈值:thresh = 0.5; image_im2bw = im2bw(image_gray,thresh);
    在这里插入图片描述

    5. 闭运算

    根据图像的具体情况来使用开运算或闭运算,matlab自带开闭运算函数的处理效果有限,仅能进行微小细节部位的处理。
    闭运算:
    排除小型黑洞,突触了比原图轮廓区域更暗的区域,将两个区域连接起来,形成连通域。闭运算的函数为bwmorph( ,‘close’ , 5),5是执行次数,执行次数可以是inf(无穷大)。
    开运算:
    放大裂缝和低密度区域,消除小物体,在平滑较大物体的边界时,不改变其面积。消除物体表面的突起。开运算的函数为bwmorph( ,‘open’ , 4),4表示开运算执行了4次。

    6. 滤波器

    中值滤波器:
    中值滤波原理:模板中心对准待处理像素,对模板下的对应像素进行灰度值排序,将中值赋给当前像素。medfilt2( ,[8,8])。[8,8]定义滤波器模板的大小为8×8。滤波器模板的大小需要自己设定。
    在这里插入图片描述
    均值滤波器:
    在图像上对目标像素给一个模板,该模板包括了其周围的临近像素,再用模板中的全体像素的平均值来代替原来像素值。
    midFiler=fspecial(‘average’,[8,8]);
    image_imfilter=imfilter(image_bwmorph,midFiler,‘replicate’);
    在这里插入图片描述

    7. 提取边缘

    对于二值图像来说matlab自带的边缘提取算子,效果差别不大。
    在这里插入图片描述

    边缘提取函数edge( ,‘prewitt’);其中’prewitt’是边缘提取算子,如下图所示。
    在这里插入图片描述

    二、 输出边缘坐标

    由边缘提取函数获得的二值图像就是一维的线(边缘)。其中,有线(边缘)的地方为1(白色),无线的地方为0(黑色)。只需要用find函数找到元素1在矩阵中的位置就能确定边缘的坐标。[i,j]=find(image_edge==1);

    利用find函数能找到所有的i,j。这里的i,j是行矩阵,包含了所有的坐标值,并按顺序排列。
    但是矩阵的位置坐标是RC坐标系,还需要转换为XY坐标系。
    [r,c]=size(image_edge); %获取矩阵的大小
    [i,j]=find(image_edge==1);

    y=r+1-i; %将rc坐标转换为xy坐标系
    x=j;
    xlswrite(‘文件名’, position ) % position坐标数据
    在这里插入图片描述
    在这里插入图片描述

    三、源代码

    clear;clc;close all
    
    %读取图像
    fprintf('%s','提示:若待处理图片在文件夹内直接输入图片名字(如:dog.jpg),若图片不在文件夹内则输入图片地址(如:D:\image\dog.jpg)');
    fprintf('\n');%换行
    name =input('提示:请输入待处理图片的名字:','s');
    image = imread(name);%B1.png B.jpg
    figure;imshow(image,[]);title('原图');
    
    %将图片转换为灰度图
    image_size=size(image);
    dimension=numel(image_size);
    if dimension==2
         fprintf('%s','提示:您读取了灰度图像!');
         image_gray =image;   
    elseif dimension==3
         fprintf('%s','提示:读取了彩色图像!');
         image_gray =rgb2gray(image);%将彩色图像转换为灰度图
         %figure(8);imshow(image_gray,[]);title('灰度图');   
    else
        fprintf('%d','提示:读取图片发生错误!');
    end 
    
    % 如果图像整体偏亮或者整体偏暗,再采用对比度增强。图像整体亮度均匀则不适用。
    % image_gray = histeq(image_gray,6);
    % figure(2);imshow(image_gray,[]);title('增强对比度');
    
    thresh = graythresh(image_gray);     %自动确定二值化阈值
    image_im2bw = im2bw(image_gray,thresh);       %对图像二值化
    figure(3);imshow(image_im2bw );title('二值化图像');
    
    image_bwmorph = bwmorph(image_im2bw,'close');  %闭运算
    figure(4);imshow(image_bwmorph,[]);title('闭运算');
    
    % 滤波器用一个够了
    
    % 均值滤波
    % midFiler=fspecial('average',[8,8]);
    % image_imfilter=imfilter(image_bwmorph,midFiler,'replicate');
    % figure(5);imshow(image_imfilter,[]);title('均值滤波');
    
    % 中值滤波(选用中值滤波效果较好)
    image_imfilter=medfilt2(image_bwmorph,[8,8]); 
    figure(5);imshow(image_imfilter,[]);title('中值滤波');
    
    
    %提取图象边缘
    image_edge=edge(image_imfilter,'prewitt');
    figure(6);imshow(image_edge);title('Prewitt Edge提取边缘');
    
    %输出坐标
    [r,c]=size(image_edge);%图片的大小
    [i,j]=find(image_edge==1);%寻找边缘坐标
    
    %将边缘坐标由rc坐标系转换为xy坐标系
    y=r+1-i; 
    x=j;  
    
    %保存到坐标到excel文件中
    position=[x';y']';
    xlswrite('边缘坐标数据(第一行x,第二行y).xlsx',position)
    fprintf('\n');%换行
    fprintf('%s','提示:数据已存入Excel表格!');
    
    %绘制散点图
    figure(7);scatter(x,y,1) %scatter()的第三个参数相当于点的大小
    

    展开全文
  • 处理过程如下:读取想要处理的图像,将图像二值化,再通过图像边缘坐标提取函数直接进行提取即可。本文介绍两个函数涉及轮廓坐标提取的函数: ① bwboundaries,功能:提取图像的边界位置 clc;clear;close all;...

    图片

    细心的伙伴不难发现上图的每个图形外面都画了一圈黑色虚线,不错,这些虚线就是根据图形轮廓提取的图像坐标绘制的。

    之前有伙伴在咱们的QQ交流群中询问有关图像轮廓坐标提取的问题,今天就给大家念叨念叨。

    今天给大家介绍两种提取轮廓坐标的方法。处理过程如下:读取想要处理的图像,将图像二值化,再通过图像边缘坐标提取函数直接进行提取即可。本文介绍两个函数涉及轮廓坐标提取的函数:

    ① bwboundaries,功能:提取图像的边界位置

    clc;clear;close all;I = imread('bird.jpg'); % 读取目标图像% RGB到二值图转换if(size(I,3) == 3)    IG = rgb2gray(I);    bw = imbinarize(IG); % 二值化elseif (islogical(I))    bw = I;      else    bw = imbinarize(I); % 二值化end
    % 法一bw = imfill(~bw,'holes'); bound = bwboundaries(bw,8,'noholes');x = bound{1}(:,2);
    展开全文
  • Matlab实现:图像边缘提取

    万次阅读 2018-08-24 23:17:13
    1、 边缘提取算法 ...Sobel算子检测方法对灰度渐变和噪声较多的图像处理效果较好,Sobel算子对边缘定位不是很准确,图像边缘不止一个像素。 Roberts算子 Roberts算子检测方法对具有...

    转: https://www.cnblogs.com/AndyJee/p/3737325.html

    1、 边缘提取算法

    方法一:一阶微分算子

    • Sobel算子

    clip_image001

    Sobel算子检测方法对灰度渐变和噪声较多的图像处理效果较好,Sobel算子对边缘定位不是很准确,图像的边缘不止一个像素。

    clip_image003

    clip_image005

    • Roberts算子

    clip_image006

    Roberts算子检测方法对具有陡峭的低噪声的图像处理效果较好,但是利用roberts算子提取边缘的结果是边缘比较粗,因此边缘的定位不是很准确。

    clip_image008

    clip_image009

    • Prewitt算子

    clip_image010

    Prewitt算子检测方法对灰度渐变和噪声较多的图像处理效果较好。但边缘较宽,而且间断点多。

    clip_image012

    clip_image014

    • Canny算子

    Canny算子是目前边缘检测最常用的算法,效果也是最理想的。

    Canny边缘检测算法不是简单的模板卷积而已,通过梯度方向和双阈值法来检测边缘点,具体算法可以参考:http://www.cnblogs.com/AndyJee/p/3734805.html

    Canny方法不容易受噪声干扰,能够检测到真正的弱边缘。优点在于,使用两种不同的阈值分别检测强边缘和弱边缘,并且当弱边缘和强边缘相连时,才将弱边缘包含在输出图像中。

    clip_image016

    clip_image018

     

    方法二:二阶微分算子

    • Laplacian算子

    clip_image019 clip_image020

    Laplacian算子法对噪声比较敏感,所以很少用该算子检测边缘,而是用来判断边缘像素视为与图像的明区还是暗区。

    clip_image022

    clip_image024

    2、 实验结果分析

    一、边缘提取:

    clip_image026

    • Sobel算子检测方法对灰度渐变和噪声较多的图像处理效果较好,sobel算子对边缘定位不是很准确,图像的边缘不止一个像素;
    • Roberts算子检测方法对具有陡峭的低噪声的图像处理效果较好,但是利用roberts算子提取边缘的结果是边缘比较粗,因此边缘的定位不是很准确;
    • Prewitt算子检测方法对灰度渐变和噪声较多的图像处理效果较好。但边缘较宽,而且间断点多;
    • Laplacian算子法对噪声比较敏感,所以很少用该算子检测边缘,而是用来判断边缘像素视为与图像的明区还是暗区;
    • Canny方法不容易受噪声干扰,能够检测到真正的弱边缘。优点在于,使用两种不同的阈值分别检测强边缘和弱边缘,并且当弱边缘和强边缘相连时,才将弱边缘包含在输出图像中。

    二、边缘复合增强

    clip_image028

    • Sobel、Robert、Prewitt算子的增强效果并不是很明显,尤其是Robert算子,因为它提取的边缘点过于稀疏和离散;
    • Laplacian算子和canny算子的增强效果都比较理想, 将边缘叠加上去后,整个手的轮廓和边缘都很清晰,直观上看,canny算子实现的效果比Laplacian算子好,最明显的地方就是手指尖的边缘。

    3、程序实现

    下面的程序就实现上面效果的完整Matlab代码:

     

    clear;clc;
    I=imread('x1.tif');
    % I=rgb2gray(I);
    % gray transform
    
    J=imadjust(I,[0.1 0.9],[0 1],1);
    
    % Edge detection
    % Sobel
    BW1=edge(I,'sobel');
    sobelBW1=im2uint8(BW1)+J;
    figure;
    %imshow(BW1);
    subplot(1,2,1);
    imshow(J);
    title('original image');
    subplot(1,2,2);
    imshow(sobelBW1);
    title('Sobel augmented image');
    % Roberts
    BW2=edge(I,'roberts');
    robertBW2=im2uint8(BW2)+J;
    figure;
    %imshow(BW2);
    subplot(1,2,1);
    imshow(J);
    title('original image');
    subplot(1,2,2);
    imshow(robertBW2);
    title('robert augmented image');
    % prewitt
    BW3=edge(I,'prewitt');
    prewittBW3=im2uint8(BW3)+J;
    figure;
    %imshow(BW3);
    subplot(1,2,1);
    imshow(J);
    title('original image');
    subplot(1,2,2);
    imshow(prewittBW3);
    title('Prewitt augmented image');
    % log
    BW4=edge(I,'log');
    logBW4=im2uint8(BW4)+J;
    figure;
    %imshow(BW4);
    subplot(1,2,1);
    imshow(J);
    title('original image');
    subplot(1,2,2);
    imshow(logBW4);
    title('Laplacian augmented image');
    % canny
    BW5=edge(I,'canny');
    cannyBW5=im2uint8(BW5)+J;
    figure;
    %imshow(BW5);
    subplot(1,2,1);
    imshow(J);
    title('original image');
    subplot(1,2,2);
    imshow(cannyBW5);
    title('Canny augmented image');
    % gaussian & canny
    % h=fspecial('gaussian',5); 
    % fI=imfilter(I,h,'replicate');
    % BW6=edge(fI,'canny');
    % figure;
    % imshow(BW6);
    
    figure;
    subplot(2,3,1), imshow(BW1); 
    title('sobel edge detect'); 
    subplot(2,3,2), imshow(BW2); 
    title('roberts edge detect'); 
    subplot(2,3,3), imshow(BW3); 
    title('prewitt edge detect'); 
    subplot(2,3,4), imshow(BW4); 
    title('log edge detect'); 
    subplot(2,3,5), imshow(BW5); 
    title('canny edge detect'); 
    % subplot(2,3,6), imshow(BW6); 
    % title('gasussian&canny edge detect');
    
    figure;
    subplot(2,3,1), imshow(sobelBW1); 
    title('sobel edge detect'); 
    subplot(2,3,2), imshow(robertBW2); 
    title('roberts edge detect'); 
    subplot(2,3,3), imshow(prewittBW3); 
    title('prewitt edge detect'); 
    subplot(2,3,4), imshow(logBW4); 
    title('laplacian edge detect'); 
    subplot(2,3,5), imshow(cannyBW5); 
    title('canny edge detect');

    下面的Matlab程序是精简的边缘提取实现:

    clear;clc;
    
    I=imread('lena.bmp');
    I=rgb2gray(I);
    imshow(I,[]);
    title('Original Image');
    
    sobelBW=edge(I,'sobel');
    figure;
    imshow(sobelBW);
    title('Sobel Edge');
    
    robertsBW=edge(I,'roberts');
    figure;
    imshow(robertsBW);
    title('Roberts Edge');
    
    prewittBW=edge(I,'prewitt');
    figure;
    imshow(prewittBW);
    title('Prewitt Edge');
    
    logBW=edge(I,'log');
    figure;
    imshow(logBW);
    title('Laplasian of Gaussian Edge');
    
    cannyBW=edge(I,'canny');
    figure;
    imshow(cannyBW);
    title('Canny Edge');

     

    展开全文
  • matlab 提取图像轮廓(图像边缘提取

    万次阅读 多人点赞 2019-09-01 17:00:06
    利用edge()函数提取图像轮廓,绘制出对象的边界和提取边界...% 提取图像轮廓,提取图像边缘 I = imread('yifu.jpg'); c = im2bw(I,graythresh(I)); figure; subplot(131);imshow(I); c = flipud(c); %实现矩阵c上...
  • (图形来源:Microsoft Office专业增强版2019图图库)细心的伙伴不难发现上图的每个图形外面都画了一圈黑色虚线,不错,这些虚线就是根据图形轮廓提取图像坐标绘制的。之前有伙伴...
  • MATLAB图像处理之图像边缘提取

    万次阅读 多人点赞 2018-10-02 23:06:53
    MATLAB中有几种算法可以对图像进行边缘提取,其中一种就是edge算法,这个edge算法中有好几个算子,每一个算子分别对应着一种边缘提取的原理,接下来就来看一下几种方法的异同 %读取一张图片,并显示 original_...
  • Matlab 代码,该程序功能实现对图像进行边缘提取,计算周长。
  • MATLAB图像处理边缘检测

    千次阅读 2022-01-04 19:18:33
    最近正好在做APMCM2019的A题,发现了matlab一些比较好用的函数,做一个学习笔记的作用 若果大家有去了解这道题目的话,会发现它其实是需要你通过图像处理等方式,将114张SIO2融化的过程照片,去建模出SIO2晶体在...
  • 一、实验名称图像锐化二、实验目的1.熟悉MATLAB软件的使用。2.掌握图像锐化的原理及数学运算。3.于MATLAB环境下编程实现对...最后,显示边缘图像和锐化增强图像,并对这些仿真结果所呈现的边缘提取和增强效果进行对...
  • 边界提取方法首先是内边界跟踪: 第一种方法不是跟踪方法。步骤是先对原图像腐蚀,然后用原图像减去腐蚀后的图像就得到边界了。 第二种方法是跟踪方法。步骤如下: 1.遍历图像。 2.标记第一个遇见像素块的前景像素...
  • 值得一提的是,CNN虽然在图像处理的领域具有不可阻挡的势头,但是它绝对不仅仅只能用来图像处理领域,大家熟知的alphaGo下围棋也可以通过CNN的结构进行处理,因为下围棋与图像有着相似之处,所以说,CNN提供给我们的...
  • 目标边缘提取图像处理学科中属于数学形态学,在提取目标边缘之前有认真思考过应该用什么方法?是用4连通方向码、8连通方向码,还是腐蚀与膨胀呢?由于本人编程水平有限,再加上对知识的熟练程度不一,最终选择较为...
  • MATLAB提取二值图像边缘

    千次阅读 2020-09-20 21:34:50
    图像处理中,经常会遇到提取图像边缘的问题,实现也不难,一般的,如果仅为可视化,可以直接通过形态学膨胀减去之前的图像获得,但这样难以提取到具体的坐标,也会使图像边缘太“厚”。其实MATLAB中内置的函数 ...
  • 二、设计内容1、设计一个实现图像边缘提取功能的界面2、界面可以采用MATLAB等编程语言设计3、要求界面能够读入并显示图片,通过各种控件选择并进行图像的边缘检测和提取操作,操作结果在对比窗口中显示4、图像边缘...
  • 数字图像处理课程设计,基于matlab appdesigner设计的Hough变换检测的图像边缘提取小程序
  • 基于MATLAB图像边缘检测

    千次阅读 2021-08-28 11:55:11
    MATLAB图像边缘提取系统设计 一、设计依据在掌握数字图像处理基本算法的基础上,利用MATLAB、VC++、Python等编程语言设计具有指定功能的图形用户界面。二、设计内容1、设计一个实现图像边缘提取功能的界面2、界面...
  • 边缘提取算子 一阶:Roberts算子、Sobel算子、Prewitt算子、Kirsch算子、Robinson算子 二阶: Laplacian算子、Canny算子、Marr-Hildreth(LoG算子) Roberts 算子 在(i+1/2,j+1/2)处差分 转化为模板即为 ...
  • Matlab图像灰度直方图及边缘提取

    千次阅读 2021-01-27 22:04:01
    脚本 Plot x=-pi:pi/40:pi;...%读取图像 figure(1), imhist(G); %灰度直方图 M = size(G,1); %获得矩阵的维度,行数 N = size(G,2); %获得矩阵的维度,列数 G=double(G); %变换图像存储格式 for i=1:M for j=.
  • clear all;close all;clc;... % 提取二值图像图像边缘 figure; subplot(121);imshow(I);title('原二值图像'); subplot(122);imshow(J);title('图像边缘'); 其他提取图像边缘的方法: 利用膨...
  • 图像边缘检测及提取方法总结(含Matlab代码)

    万次阅读 多人点赞 2018-03-26 11:22:14
     呼~最近开始入坑图像+机器学习了,学习的过程中遇到了不少不懂的东西,好在自学能力还可以(自恋中= =),所以断断续续也算学会了一些东西~因为这段时间一直在做边缘检测和提取的工作,所以本篇就总结一下一些常见...
  • [MATLAB] 霍夫变换提取图像直线边界

    千次阅读 多人点赞 2019-07-26 20:34:17
    % 读入彩色图像,注意不能使用灰度图像 o = f; % 保留彩色原图 f = rgb2gray(f); f = im2double(f); figure(); subplot(2,3,1);imshow(o);title('原图'); [m,n]=size(f); % 得到图像矩阵行数...
  • 朱逢园摘要:由于图像中所出现的信号多出现在低分量部分,而高频分量部分易出现图像模糊的问题能得到解决,从而凸显图像中的重要信息,弱化或清除不需要的信息,以使图像更为清晰。本文选取有效且易实现的程序语言及...
  • 一、获取代码方式 获取代码方式1: 完整代码已上传我的资源:【边缘检测】基于matlab蚁群算法图像边缘检测【含Matlab源码 1189期】 获取代码方式2: 通过订阅紫极神光博客付费专栏,凭支付凭证,私信博主,可获得此...
  • Matlab-图像分割与边缘检测实验-采用阈值处理方法进行图像分割 问题 实现直方图阈值法,具体方法为采用灰度直方图求双峰或多峰,选择两峰之间的谷底作为阈值,将图像转换为2值图像图像结果???? Matlab代码?...
  • 上一篇我们学习了边缘检测相关的Sobel算了,经过学习之后,我们应该可以对Sobel算子进行熟悉的运用,那么今天,我们一起来学习一下边缘检测相关的Laplacian(拉普拉斯)算子以及scharr滤波器。一、理论Laplacian 算子...
  • 数字图像边缘检测是图像分割、目标识别、区域形状提取图像处理领域的重要基础。在进行图像理解和分析时,第一步往往是边缘检测。目前边缘检测已经成为机器视觉领域最活跃的课题之一,其研究具有非常重要的理论...
  • 数字图像边缘检测是图像分割、目标识别、区域形状提取图像处理领域的重要基础。在进行图像理解和分析时,第一步往往是边缘检测。目前边缘检测已经成为机器视觉领域最活跃的课题之一,其研究具有非常重要的理论...
  • 1.图像反转 MATLAB程序实现如下: I=imread('xian.bmp'); J=double(I); J=-J+(256-1);%图像反转线性变换 H=uint8(J); subplot(1,2,1),imshow(I); subplot(1,2,2),imshow(H); 2.灰度线性变换 MATLAB程序实现如下: I...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 3,684
精华内容 1,473
关键字:

matlab提取图像边缘坐标

matlab 订阅