首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Sobel边缘检测- matlab

Sobel边缘检测- matlab
EN

Stack Overflow用户
提问于 2013-01-16 20:28:47
回答 2查看 28.9K关注 0票数 4

你好,这是我家庭作业的一部分。我需要使用Sobel边缘检测来计算和显示图像bals1.tif的边缘幅值图像和边缘方向图像。

不要使用matlab的边缘函数。您可以使用conv2。显示强边缘像素(高于阈值)的二进制边缘图像(1边缘像素,0无边缘)。确定消除球阴影的阈值。

这是我的主菜单。

代码语言:javascript
复制
addpath(fullfile(pwd,'TOOLBOX'));
addpath(fullfile(pwd,'images'));

%Sobel Edge Detection 
Image = readImage('balls1.tif');
showImage(Image);
message = sprintf('Sobel Edge Detection');
sobelEdgeDetection(Image);
uiwait(msgbox(message,'Done', 'help'));
close all

这是我的SobeEdgeDetection.m

代码语言:javascript
复制
function [ output_args ] = SobelEdgeDetection( Image )

maskX = [-1 0 1 ; -2 0 2; -1 0 1];
maskY = [-1 -2 -1 ; 0 0 0 ; 1 2 1] ;

resX = conv2(Image, maskX);
resY = conv2(Image, maskY);

magnitude = sqrt(resX.^2 + resY.^2);
direction = atan(resY/resX);
thresh = magnitude < 101;
magnitude(thresh) = 0;
showImage(magnitude);

end

我的问题是:

  1. i方向是用来干什么的?我如何显示它呢?
  2. 有一个更好的方法来获得消除球阴影的阈值。我用了试错法……

这些是我的结果,就其规模而言:

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-01-25 05:02:06

根据你作业的第二部分,你已经解决了它,也就是说,你消除了阴影。

对于第一个问题:方向可以以许多不同的方式使用。这是最简单的方法:用它来制作漂亮的图片。考虑它的一个更有用的原因是当你在做非最大抑制时,但由于你不是手动做的,所以它没有多少直接的用处。要可视化渐变方向的结果,只需为您考虑的每个方向建立颜色即可。为了进一步简化可视化,还假设您将方向从0开始减少到30度到180度的增量。例如,如果你有一个35度的方向,你就认为它是30度(因为它是你简化列表中最近的一个)。接下来,我们看到一幅图像及其梯度方向的可视化,考虑到Sobel和30度的离散化(黑色表示0度方向)。

自动确定好的阈值通常不是一件容易的事情。例如,您可以从Otsu方法提供的直方图开始,然后根据您试图解决的问题,基于其他一些直方图分析来减少或增加它的值。

票数 1
EN

Stack Overflow用户

发布于 2013-01-25 01:52:27

这是你第一个问题的答案:

在Sobel边缘检测算法中。得到的方向基本上就是梯度。

在图像处理中,梯度被定义为强度变化最大的方向。变化可以是强度的增加也可以是强度的降低。此外,这种变化是为每个像素计算的,这意味着对于每个像素,测量强度的最大变化。resX (在您的问题示例中,SobelEdgeDetection.m)表示X方向的更改,而resY定义Y方向的更改。

只需在Matlab的命令窗口中执行以下命令: imshow(resX);

另请尝试,不显示(ResY)

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14358512

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档