在图像的某些部分创建图像配置文件

时间:2013-06-13 09:04:12

标签: matlab

我在Matlab中一直在努力解决问题。 我有一个图像(A.tif),其中我想找到最大值(具有定义的阈值)但这些最大值的更具体的坐标。我的目标是在穿过这些最大值的图像上创建短轮廓(假设最大两侧的+ - 20像素) 我试过这个:

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

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

感谢您的每一个建议

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

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

让我说我得到[行,列]矩阵,每个最大坐标,我试图创建一个方向轮廓,从最大的同一行开始(最大前约20个像素),当然结束于同一行(也是最大约20个像素)。

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

1 个答案:

答案 0 :(得分: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)

请删除您的“回复”,然后修改原始帖子,以便更好地定义问题