2013-06-13 39 views
0

在Matlab中,我一直在努力解决问题。 我有一个图像(A.tif),我想在其中找到最大值(具有定义的阈值),但是这些最大值的更具体的坐标。我的目标是像穿越这些最大值上创建短型材(让说的+ - 的最大两侧20个像素) 我尝试这样做:在图像的某些部分创建图像配置文件

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

我想这rc是最大的坐标(只有一个/第一个或每个最大值?) 如何实现这些坐标,例如improfile函数? 我认为应该使用嵌套循环完成?

感谢每一个建议

您的代码工作,但它发现只有全球最大coordinates.I想找到多个最大值(与定义的阈值),并妥善解决其坐标以创建多个配置文件渡找到的每个最大值。我有一个小的问题,用于导入文件功能:

improfile(IMAGE,[起始点],[结束点])。

可以说我得到了每个最大坐标的[rows,columns]矩阵,我试图创建一个方向轮廓,它在最大值(最大值前约20像素)的同一行开始,当然也结束在同一行(距离最大约20个像素)。

这是正确的表达式:improfile(IMAGE,[rows columns-20],[rows columns + 20]);它绘制的东西,但它似乎只加入最大值,而不是使强度配置文件

回答

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) 

请删除你的“回复”,而是编辑你原来的帖子,在那里你更好地定义你的问题

+0

看到我的answear下面:) – user2481407

相关问题