图像处理-区域标记

这篇博客介绍了如何使用Matlab进行图像处理,具体是将二值图像进行开运算后,通过自定义算法实现连通域的标记,并将结果转化为彩色图像展示。博主首先读取图像并转换为二值图像,然后使用结构元素进行开运算。接着,博主展示了如何遍历图像并标记连通域,最后将标记结果转换为彩色图像进行显示。
摘要由CSDN通过智能技术生成

图像处理-区域标记 Matlab-code

clc;
close all;
clear all;

I = imread('Rice.png');
BW1 =im2bw(I);
figure;
subplot(221),imshow(BW1),title('rice');

st=strel('square',3);
BW2 = imopen(BW1, st);
subplot(222),imshow(BW2),title('BW2');
% e = edge(BW2, 'sobel');
% figure,imshow(e, []),title('edge');

% 调用函数方法
%% [L, num] = bwlabel(BW2);  % 进行连通域的求解,L为返回图图像大小一样的标记; num为连通域个数

% 自己实现连通域的标记
F = uint8(BW2);  % flag; 第一个连通域为1,第二个为2          
[c, w] = size(F);
num = 1;            
queue = []; % 队列
ed=[-1 -1;0 -1;1 -1;1 0;1 1;0 1;-1 1;-1 0]; % 从左上角像素,逆时针搜索
for i=1:c
    for j=1:w
        if(BW2(i,j)==1 && F(i,j)==1) % 进入连通域内的一个点
            queue = [queue; [i, j]]; % 该点坐标入队列
            F(i,j)=num+1; % 该点标记已读
            while(length(queue) > 0) %队列不空
                x = queue(1,:); ni=x(1); nj=x(2); % 取队首队
                [l1, l2] = size(queue);
                if (l1==1)
                    queue = []; % 队列只有一个元素 出队
                else
                    queue = queue(2:l1,:); % 队列存在多个元素,出队首
                end
                for k=1:8           %逆时针八邻域搜索
                    tmpi=ni+ed(k,1);        %八邻域临时坐标
                    tmpj=nj+ed(k,2);
                    % 边界检查 && 是连通域 && 未被标记
                    if (~(tmpi<=0 || tmpi>c || tmpj<=0 || tmpj>w)) && BW2(tmpi,tmpj)==1 && F(tmpi,tmpj)==1
                        queue = [queue; [tmpi, tmpj]]; %入队列
                        F(tmpi,tmpj)=num+1; % 标记为第几个连通域
                    end
                end
            end
            num = num + 1;
        end
    end
end 
F = F-1; %背景为连通域0
num = num -1; %num从2开始的,在这里减去1
subplot(223),imshow(F,[]),title('F');
RGB_label = label2rgb(F, 'spring', 'c', 'shuffle'); % 标记的连通域转换为彩色
subplot(224),imshow(RGB_label,[]),title('RGB-L');

在这里插入图片描述

  • 2
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值