2021-05-20

数字图像处理 找出两幅图像中有几处不同(含有位移)

第一幅
第二幅
分析:因为两幅图片含有相对位移,首先是找到相对的位移,还原到本来的位置,再做差找出不同,在原图上标记出来。

代码:

close all;
f=imread('hw1_painting_1.jpg');
g=imread('hw1_painting_2.jpg');
min=sum(sum(abs(f).^2));

%寻找位移量
for i=-5:5                                %第一次循环是从-50,50 结果得出之后,考虑到运行速度,变成了-5,5
    for j=-5:5
        se = translate(strel(1), [i j]);  %  向下和向右移动i j个位置
        J = imdilate(f,se);               %平移之后的图像,对f进行平移,使之与g相同
        J1=rgb2gray(J);                   %将彩色图片转换成灰色
        g1=rgb2gray(g);
        C=J1-g1;                          %进行图像减法 得到两幅图像的差别
        mo=sum(sum(abs(C).^2));           %计算C的模
        if mo<min
            min=mo;
            m=i;n=j;                      %记录位移
        end
    end
end

se = translate(strel(1), [m n]);          % 向下和向右移动m n个位置
f1= imdilate(f,se);                       %平移之后的图像 此时f1和g已经没有错位了

fin1=f1-g;                                %考虑到图像相减有负值,负值显示不出来,故用(f1-g),(g-f1)                                                 
fin2=g-f1;

fin=2*fin1+2*fin2;                        %为了使结果更明显,进行了线性增强


%进行原图标记
fin1=rgb2gray(fin);                       %将彩色图片转换成灰色
b = imbinarize(fin1);                     %转化成二值图像

shuzu = strel('square', 6);                %创造一个6*6的矩阵元素
pengzhang  = imdilate(b, shuzu);           %进行膨胀
subplot(224);
imshow(pengzhang);
liantong = bwlabel(pengzhang);             %标记连通区域
stats = regionprops(liantong);
num = length(stats) ;                       %连通域总个数

subplot(221);
imshow(f);
hold on
for index=2:num
rectangle('Position',stats(index).BoundingBox,'curvature',[1,1],'LineWidth',1,'EdgeColor','r') ;
end
subplot(222);
imshow(g);
for index=2:num
rectangle('Position',stats(index).BoundingBox,'curvature',[1,1],'LineWidth',1,'EdgeColor','r') ;
end
subplot(223);
imshow(fin);

结果:
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值