我有一个名为original
的矩阵,相应的图表如下图所示。
然而,我希望以相应行的形式将图像的中心部分转换为另一个变量,如下图所示。
我抬头找到了该中心,并了解了在centroid
中使用regionprops
的方法。例如,如下面的代码示例。
s = regionprops(original,'centroid');
centroids = cat(1, s.Centroid);
plot(centroids(:,1),centroids(:,2), 'b*')
这种使用centroid
的方法无法帮助我获得整个中心行。有没有其他方法可以做到这一点?
答案 0 :(得分:2)
计算每列中平均非零指数的一种方法是直接计算它。
编辑:目前尚不清楚噪音的含义,但如果我将其解释为您只想考虑每列最宽的区域,那么我们可以按如下方式找到该区域的平均值。
avg = zeros(1,size(original,2));
for c = 1:size(original,2)
% find largest contiguous region in the column
sig = original(:,c);
der = diff([false; sig; false]);
upedge = find(der == 1);
downedge = find(der == -1);
[~,region_idx] = max(downedge-upedge);
first = upedge(region_idx);
last = downedge(region_idx)-1;
% get the average index in the region
avg(c) = (last + first) / 2;
end
% plot results
hold off;
imagesc(original); hold on;
plot(1:size(original,2), avg, '-r', 'LineWidth', 2);
set(gca, 'YDir', 'normal');
axis([1, size(original,2), 1, 250]);
其中,结果如下图