Algorithm 如何在matlab中找到图像的动态中心点?

Algorithm 如何在matlab中找到图像的动态中心点?,algorithm,matlab,image-processing,computer-vision,matlab-figure,Algorithm,Matlab,Image Processing,Computer Vision,Matlab Figure,我有一个名为的矩阵,相应的图如下图所示 然而,我想将图像的中心部分以各自的行的形式放入另一个变量中,如下图所示 我抬头寻找中心,了解了在regionprops中使用centroid的方法。例如,如下面的代码示例 s = regionprops(original,'centroid'); centroids = cat(1, s.Centroid); plot(centroids(:,1),centroids(:,2), 'b*') 使用质心的这种方法没有帮助我获得整个中心行。有没有其他方法

我有一个名为的矩阵,相应的图如下图所示

然而,我想将图像的中心部分以各自的行的形式放入另一个变量中,如下图所示

我抬头寻找中心,了解了在
regionprops
中使用
centroid
的方法。例如,如下面的代码示例

s = regionprops(original,'centroid');
centroids = cat(1, s.Centroid);
plot(centroids(:,1),centroids(:,2), 'b*')

使用
质心
的这种方法没有帮助我获得整个中心行。有没有其他方法可以做到这一点?

计算每列中平均非零索引的一种方法是直接计算它

编辑:不清楚噪声是什么意思,但是如果我把这个解释为你只想考虑每列最宽的区域,那么我们可以发现这个区域的平均值如下:

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]);
其结果如下图所示


你所说的图像的中心部分到底是什么意思?中心是动态的。例如,在x=600时,图像有点收缩。我希望中心采用我的图形中的波浪图,我想提取这个。(中间没有一条直线的中心线)。所以你想要在图像的每一列中都显示黄色区域的中心?准确地说。在最后一列中,(大约在第170~190行之间),在所需区域上方有一些噪声。不得取下,必要时可将其移除。是。我只想选择连续的部分,因为在我的其他图像的列中还有其他针头片段。信息量大,很有帮助。谢谢我希望在上面的代码中有更多的注释(在这些步骤中具体做了什么),以找到最大的连续区域,因为我不理解这一部分。为了找到信号从
false
true
true
false
的最大区域,我使用
diff
。因为我用
false
填充图像,我保证每次向下转换都有一个向上转换。我找到这些转变的指数,并取跨越最大持续时间的一对。