基于图像sobel边缘提取和形态学特征匹配的多碎片图像拼接算法matlab仿真

目录

1.引言

2.算法测试效果

3.算法涉及理论知识概要

3.1 碎片图像读取与图像预处理

3.2 Sobel算子边缘提取

3.3 形态学处理优化边缘轮廓

3.4 碎片形态学特征匹配检索

3.5 多组子块图像矩阵叠加复原完整图像

4.核心程序

5.完整算法代码文件获得


1.引言

破碎图像碎片复原在文物数字化、破损档案修复等场景具备实用价值。多碎片图像拼接不同于普通全景图像拼接,碎片之间不存在完整重叠区域,仅依靠碎片边界的边缘、形态轮廓信息完成匹配、配准与图像融合。整体流程包含碎片图像读取预处理、Sobel算子边缘提取、形态学轮廓特征计算、碎片边界特征匹配、迭代图像配准融合、多子块图像叠加复原六大环节。利用Sobel算子提取碎片四周边缘轮廓,形态学处理过滤噪声边缘;然后完成碎片边界形态特征相似度检索,然后完成图像变换配准,迭代将碎片逐步拼合,最终叠加生成完整复原图像。

2.算法测试效果

3.算法涉及理论知识概要

3.1 碎片图像读取与图像预处理

系统GUI触发读取碎片文件,批量读取碎片RGB图像Irgb。彩色碎片图像首先转换为灰度图像,消除色彩通道干扰,便于后续边缘检测。RGB转灰度的计算公式:

其中,*代表二维卷积运算。预处理之后图像送入Sobel边缘提取模块,该部分对应代码中`func_get_debris`函数的前期处理流程,同时保存原始RGB碎片图、灰度图,供后续配准融合使用。

3.2 Sobel算子边缘提取

Sobel算子利用横向、纵向梯度模板分别计算图像x方向、y方向灰度梯度,获取碎片物体边界。x 方向Sobel卷积核Sx,y方向卷积核Sy。

设置阈值LVL(程序中LVL取0.6~0.62),对梯度幅值二值化得到边缘二值图E(x,y):

Gmax为整张图像梯度幅值最大值。E(x,y)=1的像素代表边缘点,即代码中保存的`edges{i}`边缘矩阵。阈值LVL控制边缘保留多少细节,LVL越高,仅保留强轮廓,过滤细碎纹理边缘;LVL过低会引入大量无效纹理干扰后续碎片匹配。

3.3 形态学处理优化边缘轮廓

Sobel直接输出的边缘图存在断点、细小毛刺、孤立噪声点,需要形态学运算优化轮廓。主要使用腐蚀、膨胀运算。设结构元为B,二值边缘图像E。膨胀运算,扩大边缘连通域,填补边缘细小断裂:

经过形态学开运算,得到优化后的碎片边界轮廓图像。提取轮廓的形态特征向量:轮廓长度、轮廓点坐标序列、边界点梯度方向,构成该碎片的形态特征描述子。不同碎片之间,对比边界形态特征向量的相似度,该过程对应`func_RL`特征匹配函数输入。

3.4 碎片形态学特征匹配检索

输入待匹配碎片边缘特征,和其余全部碎片的轮廓特征做相似度计算。设碎片A轮廓特征向量为 Fa,候选碎片B轮廓特征向量Fb。采用归一化相关系数衡量形态轮廓相似度:

ii2即为匹配最优碎片编号。同时输出匹配边界的坐标偏移量R1b,C1b,代表两片碎片之间水平、竖直方向配准偏移。这一步对应代码`func_RL`,输出最优匹配碎片索引与偏移参数,若相似度低于下限阈值,则判定没有可匹配碎片。

3.5 多组子块图像矩阵叠加复原完整图像

程序中将碎片分为多组子集分别迭代拼接,每组碎片迭代完成,输出子拼接图像 IRGB1, IRGB2, IRGB3, IRGB4。创建足够大的零矩阵作为画布,设置各组子块垂直方向放置偏移系数,将各组子块缩放(除以系数1.3做亮度压缩)后放到画布不同位置:

裁剪边缘多余空白,转换uint8数据类型,在GUI的axes3控件显示最终复原图像。

综上所述,完整算法执行流程:

①GUI界面读取全部碎片图像,RGB图像转为灰度图,高斯平滑降噪;

②Sobel算子计算梯度幅值,设定LVL阈值做二值化得到碎片边缘图;

③形态学开运算去除边缘毛刺噪声,提取碎片边界形态特征向量;

④func_RL计算不同碎片轮廓特征相似度,搜索最优匹配碎片,获取配准偏移量;

⑤func_hbing、func_hbing2完成图像平移配准、加权融合,func_get_debris2重新提取拼接后图像边缘特征,迭代匹配下一块碎片;

⑥多组碎片分别拼接得到多个子复原块,画布矩阵叠加,裁剪后输出完整复原图像。

4.核心程序

function [Images,Images0,IC02,edges] = func_get_debris(Image,LVL);
 
%二值化
IC0   = im2bw(Image,LVL*graythresh(Image));
% figure(1);
% subplot(231)
% imshow(IC0);title('二值化图像');
%提取各个碎片
[L,n]               = bwlabel(IC0);
[rows,cols]         = size(IC0);
L2(1:rows,1:cols,3) = 0; 
Index               = 0;
for i=1:n
    i
    [r,c]     = find(L==i);
    a1(i)     = max(r);
    a2(i)     = min(r);
    b1(i)     = max(c);
    b2(i)     = min(c);
    w(i)      = b1(i)-b2(i);
    h(i)      = a1(i)-a2(i);
    square(i) = w(i) * h(i);
    if square(i) > 5000 
       Index                                  = Index + 1; 
       %将碎片像素信息保存下来
       Images                                 = Image(a2(i):a1(i),b2(i):b1(i),:);
       IC02                                   = IC0(a2(i):a1(i),b2(i):b1(i));
       Images0                                = IC0(a2(i):a1(i),b2(i):b1(i));


       %
       L2(a2(i)+1:a2(i)+2 ,b2(i)+1:b1(i),1)   =   255; 
       L2(a1(i)+1:a1(i)+2 ,b2(i)+1:b1(i),1)   =   255; 
       L2(a2(i)+1:a1(i)   ,b2(i)+1:b2(i)+2,1) =   255; 
       L2(a2(i)+1:a1(i)   ,b1(i)+1:b1(i)+2,1) =   255;    
       L2(a2(i)+1:a2(i)+2 ,b2(i)+1:b1(i),2)   =   0; 
       L2(a1(i)+1:a1(i)+2 ,b2(i)+1:b1(i),2)   =   0; 
       L2(a2(i)+1:a1(i)   ,b2(i)+1:b2(i)+2,2) =   0; 
       L2(a2(i)+1:a1(i)   ,b1(i)+1:b1(i)+2,2) =   0; 
       L2(a2(i)+1:a2(i)+2 ,b2(i)+1:b1(i),3)   =   0; 
       L2(a1(i)+1:a1(i)+2 ,b2(i)+1:b1(i),3)   =   0; 
       L2(a2(i)+1:a1(i)   ,b2(i)+1:b2(i)+2,3) =   0; 
       L2(a2(i)+1:a1(i)   ,b1(i)+1:b1(i)+2,3) =   0;        
    end
end



pixel2 = zeros(rows,cols,3);
for i = 1:rows
    for j = 1:cols
        if L2(i,j) == 255
           pixel2(i,j,1) = L2(i,j,1);
           pixel2(i,j,2) = L2(i,j,2);
           pixel2(i,j,3) = L2(i,j,3);
        else
           pixel2(i,j,1) = IC0(i,j);
           pixel2(i,j,2) = IC0(i,j);
           pixel2(i,j,3) = IC0(i,j);
        end
    end
end
% subplot(232)
% imshow(pixel2);title('提取碎片');
% subplot(233)
% imshow(Images);title('提取碎片');
% subplot(234)
% imshow(IC02);title('提取碎片二值图');
%边缘提取
IC02 = imfill(IC02,'hole'); 
edges = edge(IC02,'sobel');
edges = bwareaopen(edges,50);
 

5.完整算法代码文件获得

完整程序见博客首页左侧或者打开本文底部GZH名片

V关注后回复码:X153)

V

posted @ 2026-09-16 23:39  我爱C编程  阅读(2)  评论(0)    收藏  举报