【问题标题】:MATLAB code for matrix labeling矩阵标注的 MATLAB 代码
【发布时间】:2014-04-12 17:09:13
【问题描述】:

我在为 matlab 代码编写代码以执行二进制矩阵标记时遇到问题。在我的代码中,我将当前元素的值与其顶部、左侧和左上角的值进行比较,如果值匹配,则为该元素赋予相同的标签。

代码如下:

clc; clear all; close all; tic;
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

M=10; N=20;

I_b=[
     0     1     0     0     0     1     0     0     0     0     1     0     0     0     0     0     1     0     0     1
     0     0     1     1     0     1     0     0     1     1     1     0     0     0     0     0     1     1     0     0
     1     0     0     1     1     0     0     1     0     0     0     0     0     1     1     0     1     1     1     1
     0     1     0     0     0     1     0     0     0     0     0     0     0     0     1     0     0     0     1     0
     0     0     0     0     0     0     0     1     0     0     0     1     0     1     0     1     0     0     1     0
     0     1     1     0     0     0     0     0     0     0     0     0     0     0     1     0     0     0     1     0
     1     0     0     0     0     1     0     0     0     0     0     0     0     0     0     0     0     1     0     1
     0     0     0     1     0     1     0     1     1     0     0     0     1     0     0     0     0     1     1     0
     0     0     1     0     0     0     0     1     0     0     0     0     0     0     1     0     0     1     0     0
     0     1     1     1     1     0     0     1     1     0     1     0     0     0     0     1     0     1     1     1  
];

[ID]=UnionFind(I_b,M,N);

I_b

ID

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
toc;




%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

function [ID] = UnionFind(I_b, M, N)

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

ID=reshape(1:1:M*N,M,N);

for i=2:1:M*N

        if(I_b(i)==I_b(i-1))

            ID(i)=ID(i-1);

        elseif (i>M)

            if(I_b(i)==I_b(i-M))

                ID(i)=ID(i-M);

            end

        elseif (i>(M+1))

            if (I_b(i)==I_b(i-1-M))

                ID(i)=ID(i-1-M);

            end

        end

end

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

当您运行此代码时,您会注意到零和一的某些部分具有多个标签,即使它们是连接的,因此必须具有相同的标签。

你能检查一下这段代码吗?

【问题讨论】:

    标签: matlab image-processing signal-processing


    【解决方案1】:

    您(至少)不会处理在遍历过程中两个不同标记的区域合并为一个区域的情况。您也有包装 I_b(i - 1) 的错误。请改用内置函数bwlabel

    【讨论】:

    • 我知道...但是如何在我的代码中修复它?我不想使用matlab的内置函数。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-04-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多