【问题标题】:Sobel Edge detection – matlabSobel 边缘检测 - matlab
【发布时间】:2013-01-25 05:02:06
【问题描述】:

你好,作为我家庭作业的一部分。我需要计算并显示边缘幅度图像和 图像balls1.tif的边缘方向图像,使用Sobel边缘检测。

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

这是我的 main.m

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

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.我用的方向是什么?我怎样才能显示它?
2.有没有更好的方法来获得消除球阴影的阈值。我用反复试验....

就显示幅度而言,这些是我的结果:

【问题讨论】:

  • direction - 是图像上的梯度方向,它与物体边缘正交。您的图像不会让您消除阴影:在这种情况下,您会失去一些上边框。

标签: image matlab image-processing


【解决方案1】:

根据你作业的第二部分,你已经解决了,即你消除了阴影。

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

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

【讨论】:

  • 当尝试使用 imagsec 或 showImage 时,我的图像变成了全黑。我需要做一些缩放吗?
  • 我没有做任何缩放,只做答案中描述的。从 0 度到 29 度的任何东西都分配给强度 0(黑色),从 30 到 59 分配给其他颜色,依此类推。然后你就展示出来。
【解决方案2】:

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

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

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

看到它实际上只是在 Matlab 的命令窗口中触发这个命令: imshow(resX);

也试试,imshow(resY)

【讨论】:

    猜你喜欢
    • 2015-11-05
    • 1970-01-01
    • 2011-02-25
    • 2021-06-02
    • 2020-04-06
    • 1970-01-01
    • 2016-11-07
    • 2018-12-12
    • 2015-08-09
    相关资源
    最近更新 更多