0

我在 Matlab 中一直在为一个问题苦苦挣扎:)。我有一个图像(A.tif),我想在其中找到最大值(具有定义的阈值),但这些最大值的更具体坐标。我的目标是在跨越这些最大值的图像上创建简短的配置文件(比如说最大值两侧的 +- 20 像素)我试过这个:

[r c]=find(A==max(max(A)));

我想这是最大值rc坐标(只有一个/第一个或每个最大值?)我怎样才能将这些坐标实现到例如improfile函数中?我认为应该使用嵌套循环来完成?

感谢每一个建议

您的代码正在运行,但它仅找到全局最大坐标。我想找到多个最大值(具有定义的阈值)并正确处理其坐标以创建多个跨越找到的每个最大值的配置文件。我对 improfile 功能没有什么问题:

improfile(IMAGE,[起点],[终点]) 。

假设我得到 [rows, columns] 矩阵和每个最大值的坐标,我正在尝试创建一个方向轮廓,它从最大值所在的同一行开始(最大值前约 20 个像素),当然在同一行结束(距离最大值也大约 20 像素)。

这是正确的表达吗 :improfile(IMAGE,[rows columns-20],[rows columns+20]); 它绘制了一些东西,但它似乎只加入最大值而不是制作强度曲线

4

1 回答 1

2

你没有提供足够的信息,所以我不得不猜测一些事情。您应该将 应用于max()矢量化图像并存储索引:

[~,idx] = max(I(:))

然后将其转换为xy坐标:

[ix,iy] = ind2sub(size(I),idx)

这是图像最大值的 x 和 y。这真的取决于你想要什么配置文件部分。像这样的东西正在工作:

I = imread('peppers.png');
Ir = I(:,:,1);
[~,idx]=max(Ir(:))
[ix,iy]=ind2sub(size(Ir),idx)
improfile(Ir,[0 ix],[iy iy])

编辑:
如果你想找到k最大值而不仅仅是最大值,你可以做一个简单的排序:

[~,idx] = sort(I(:),'descend');
idxk = idx(1:k);
[ix,iy] = ind2sub(size(I),idxk)

请删除您的“回复”,而是编辑您的原始帖子,以便更好地定义您的问题

于 2013-06-13T12:48:53.333 回答