4

hello as part of my Homework. i need to calculate and display the edge magnitude image and the edge direction image of image balls1.tif, using Sobel Edge detection.

Do not use matlab's edge function. You may use conv2. Display a binary edge image (1 edge pixel, 0 no edge) of strong edge pixels (above a threshold). Determine a threshold that eliminates the ball shadows.

here is my 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

here is my 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

my questions are:
1. i what is the direction used for ? and how can i display it?
2. is there a better way to get a threshold to eliminate the ball shadows. i used trial and error....

enter image description here

these are my result as far as showing the magnitude:

enter image description here

4

2 回答 2

1

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

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

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

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

也试试,imshow(resY)

于 2013-01-24T17:52:27.320 回答
1

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

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

在此处输入图像描述 在此处输入图像描述

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

于 2013-01-24T21:02:06.097 回答