我在Matlab中一直在努力解决问题。 我有一个图像(A.tif),其中我想找到最大值(具有定义的阈值)但这些最大值的更具体的坐标。我的目标是在穿过这些最大值的图像上创建短轮廓(假设最大两侧的+ - 20像素) 我试过这个:
[r c]=find(A==max(max(A)));
我认为r
和c
是最大坐标(只有一个/第一个或每个最大值?)
如何将这些坐标实现为improfile
函数?
我认为应该使用嵌套循环来完成?
感谢您的每一个建议
您的代码正在运行,但它只找到全局最大坐标。我想找到多个最大值(具有已定义的阈值)并正确地寻址其坐标以创建跨越每个找到的最大值的多个配置文件。我对improfile函数没什么问题:
improfile(IMAGE,[起点],[终点])。
让我说我得到[行,列]矩阵,每个最大坐标,我试图创建一个方向轮廓,从最大的同一行开始(最大前约20个像素),当然结束于同一行(也是最大约20个像素)。
是这个正确的表达式:improfile(IMAGE,[rows columns-20],[rows columns + 20]);它绘制了一些东西,但似乎只加入了最大值,而不是制作强度曲线
答案 0 :(得分:2)
你没有提供足够的信息所以我不得不猜测一些事情。您应该将max()
应用于矢量化图像并存储索引:
[~,idx] = max(I(:))
然后将其转换为x
和y
坐标:
[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)
请删除您的“回复”,然后修改原始帖子,以便更好地定义问题