【问题标题】:MATLAB - Find local maximum and minimum of an edge map (row-wise)MATLAB - 查找边缘图的局部最大值和最小值(逐行)
【发布时间】:2014-07-03 11:00:23
【问题描述】:

首先我会说我是 MATLAB 新手,这是我第一次尝试与图像处理相关的应用程序。

我正在构建一个 MATLAB 库(将在 Windows Phone 应用程序中使用),它将自然图像的边缘图作为输入。我需要逐行遍历地图。如果遇到边缘,我需要找到边缘的局部最小值和局部最大值。

我需要帮助弄清楚如何做; 1) 遍历边缘图 - 逐行 2) 检测边缘 3) 求边的局部最小值和局部最大值

感谢任何帮助。在此先感谢:)

【问题讨论】:

  • 如果你有一点代码或伪代码会很好,即使是关于你的数据的更多信息也会很好。我猜你使用彩色图像?还是灰度?而我现在最大的问题是我并不真正理解你的观点 1) 和 2)。图像的像素值是否代表相位值或某事。就像那样进入 mod(2pi) 的值,然后跳回 0 或者你对边缘是什么意思?你的 3) 点很简单。矩阵上使用的方法minmax返回一个行向量,表示每列的最小值和最大值。
  • 因为你想要它的行,你可以转置你的矩阵然后使用这些命令。转置由' 完成。所以你的行最小值命令是min(Matrix')
  • 对于您的边缘检测问题,我找到了这个链接:mathworks。猜猜你可以试试这两个函数,看看哪一个更适合你的数据。
  • 我正在尝试遍历图像,而不是矩阵。最小值和最大值是图像本身的。如果我遇到边缘(强度变化,即:黑色到白色),我需要找到它的局部最小值和最大值。我正在尝试使用这里研究的方法; stefan.winklerbros.net/Publications/icip2002.pdf

标签: algorithm matlab max minimum edge-detection


【解决方案1】:

这只是我的cmets的一个总结。我试着回答你上面给出的 3) 问题。

1) 会有一种很好的矢量化方式,但老实说,我不确定它是如何工作的。有效的方法是循环执行。对于 mxn 矩阵,它可能如下所示:

for k=1:m
  for l=1:n
    new_Matrix(k,n-l+1) = old_Matrix(k,l);
  end
end

正如所说,这不是解决问题的最佳方法,因为循环会对您的运行时产生负面影响,但它们应该可以解决问题。

2) 边缘检测:

BW1 = edge(new_Matrix,'sobel');%//Sobel
BW2 = edge(new_Matrix,'canny');%//Canny-filter

3) 最小值和最大值逐行

Matrix_transpose = Matrix'; %//transposed matrix
row_wise_min= min(Matrix_transpose);
row_wise_max = max(Matrix_transpose);

【讨论】:

  • 这就是我想要做的;将原始图像转换为灰度图像 -> 使用 canny 边缘检测生成灰度图像的边缘图(二值图像) -> 遍历边缘图 -> 如果找到边缘,则获取其局部最小值和最大值 -> 继续搜索直到我到达最后一个像素。
  • 问题是图像边缘检测结果 - 二进制图像。不是矩阵。我需要转到图像中的每个像素并检查它是否是边缘。如果是,我需要分别找到该边的局部最小值和最大值。然后找到下一个边缘,做同样的事情。这一直持续到我到达最后一个像素。
  • Matlab 正在将图像转换为矩阵。用于红色蓝色和绿色(彩色)图像的 mxnx1 矩阵(灰度)或 mxnx3 矩阵。尽管如果您将二进制图像读入 matlab,您应该能够使用给定的函数对其进行处理。如果您想将图像作为对象而不是将其作为矩阵处理,您应该考虑使用 matlab-simulink 或其他面向对象的编程语言。至少在我看来这会容易得多。
  • 抱歉这么久才回复。好的,假设我有一个灰度图像矩阵。假设我也有图像中每个边缘的坐标。每行中可以有多个边。现在,我必须计算每条边的最小值和最大值。不适用于整排。我知道 min() 和 max() 可以做到这一点。但我不确定如何应用它。
猜你喜欢
  • 2017-01-04
  • 2014-12-15
  • 2012-11-21
  • 2021-09-12
相关资源
最近更新 更多