形态学操作

摘 要:本实验主要编写了一个用3*3结构元进行二值膨胀和腐蚀的函数;编写了一个计算两个图像集合的交、差和补的计算函数;编写了一个实现形态学边界抽取算法;编写了一个用3*3结构元进行灰度图像膨胀和腐蚀的函数;编写了一个实现灰度图像形态学梯度公式的函数;编写了一个实现灰度图像Tophat变换公式的函数。
这里写图片描述
这里写图片描述
这里写图片描述
这里写图片描述
这里写图片描述
这里写图片描述
这里写图片描述
这里写图片描述
这里写图片描述

function [imd,ime]= dilation_erosion(ima,A)
%膨胀腐蚀函数
%ima为输入图像,A为输入的3*3结构元
%imd为输出的膨胀图,ime为输出的腐蚀图t
[m,n]=size(ima);
imd=ones(m,n);
ime=zeros(m,n);
p=zeros(3,3);
q=zeros(3,3);
%将输入图像四周添加一圈0元素
imb=zeros(m+2,n+2);
for i=2:m+1
    for j=2:n+1
        imb(i,j)=ima(i-1,j-1);
    end
end
for i=2:m+1
    for j=2:n+1
        p=A&[imb(i-1,j-1),imb(i-1,j),imb(i-1,j+1);...
            imb(i,j-1),imb(i,j),imb(i,j+1);...
            imb(i+1,j-1),imb(i+1,j),imb(i+1,j+1)];
        if (p==zeros(3,3))
            imd(i-1,j-1)=0;
        end 
         q=A&[imb(i+1,j+1),imb(i+1,j),imb(i+1,j-1);...
            imb(i,j+1),imb(i,j),imb(i,j-1);...
            imb(i-1,j+1),imb(i-1,j),imb(i-1,j-1)];
        if (q==A)
            ime(i-1,j-1)=1;
        end
    end
end
end

%----------------------------------------
function [imt] = differ(ima,imb)
%功能:求差集
%输入图像ima,imb;输出图像:imt
[m,n]=size(ima);
imt=zeros(m,n);
for i=1:m
    for j=1:n
        if(ima(i,j)==1&imb(i,j)~=1)
            imt(i,j)=1;
        end
    end
end
end
%------------------------------------------------
function [imt] = combine(ima,imb )
%功能:求交集
%输入图像ima,imb;输出图像:imt
[m,n]=size(ima);
imt=zeros(m,n);
for i=1:m
    for j=1:n
        if(ima(i,j)==1&imb(i,j)==1)
            imt(i,j)=1;
        end
    end
end
end
%---------------------------------------------------
function [ imt ] = complement( ima )
%功能:求补集
%输入图像:ima,输出图像:imt
[m,n]=size(ima);
imt=zeros(m,n);
for i=1:m
    for j=1:n
        if(ima(i,j)==0)
            imt(i,j)=1;
        end
    end
end
end
%--------------------------------------------------
function pro0901
%提取边界
im=imread('Fig9.20(left).jpg');
ima=logical(im);
%ima=[1,1,1,0,1;0,1,1,1,1;0,0,1,1,1;0,1,1,1,1;1,1,0,0,0];
A=ones(3,3);
[imd,ime]=dilation_erosion(ima,A);
figure;subplot(221);imshow(im);title('原图');
subplot(222);imshow(ima);title('二值图');
subplot(223);imshow(imd);title('膨胀图');
subplot(224);imshow(ime);title('腐蚀图');
img=differ(ima,ime);
figure;imshow(img);title('提取边界');
%求补集,差集,交集
X=[1 1 1 1 1;0 1 1 1 0;0 0 1 0 0;0 1 1 1 0;1 1 1 1 1];
Y=X';
Z1=complement(X);
Z2=differ(X,Y);
Z3=combine(X,Y);
figure;subplot(121);imshow(X);title('X');
subplot(122);imshow(Y);title('Y');
figure;subplot(131);imshow(Z1);title('Xc');
subplot(132);imshow(Z2);title('X-Y');
subplot(133);imshow(Z3);title('XnY');
end
%----------------------------------------------------------------------------
function [imd,ime]= gray_d_e(ima,A)
%灰度图像膨胀腐蚀函数
%ima为输入图像,A为输入的3*3结构元
%imd为输出的膨胀图,ime为输出的腐蚀图t
[m,n]=size(ima);
imd=zeros(m,n);
ime=zeros(m,n);
x=zeros(3,3);
y=zeros(3,3);
%将输入图像四周添加一圈0元素
imb=zeros(m+2,n+2);
for i=2:m+1
    for j=2:n+1
        imb(i,j)=ima(i-1,j-1);
    end
end
for i=2:m+1
    for j=2:n+1
  %腐蚀       x=[imb(i+1,j+1)-A(1,1),imb(i+1,j)-A(1,2),imb(i+1,j-1)-A(1,3);...
            imb(i,j+1)-A(2,1),imb(i,j)-A(2,2),imb(i,j-1)-A(2,3);...
            imb(i-1,j+1)-A(3,1),imb(i-1,j)-A(3,2),imb(i-1,j-1)-A(3,3)];
        ime(i-1,j-1)=min(min(x));
    %膨胀
     y=[imb(i-1,j-1)+A(1,1),imb(i-1,j)+A(1,2),imb(i-1,j+1)+A(1,3);...
            imb(i,j-1)+A(2,1),imb(i,j)+A(2,2),imb(i,j+1)+A(2,3);...
            imb(i+1,j-1)+A(3,1),imb(i+1,j)+A(3,2),imb(i+1,j+1)+A(3,3)];
        imd(i-1,j-1)=max(max(y));
    end
end
ime=uint8(ime);
imd=uint8(imd);

%--------------------------------------------------
function pro0902
%功能1:实现灰度图像形态学梯度
%功能2:实现灰度图像顶帽变换
ima=imread('Fig9.39(a).jpg');
A=ones(3,3);
%调用腐蚀膨胀函数
[imd,ime]= gray_d_e(ima,A);
%膨胀图与腐蚀图相减,实现形态学梯度
imt=imsubtract(imd,ime);
subplot(221);imshow(ima);title('原图');
subplot(222);imshow(imd);title('膨胀图');
subplot(223);imshow(ime);title('腐蚀图');
subplot(224);imshow(imt);title('形态学梯度');
%实现开操作
[imdd,]=gray_d_e(ime,A);
imtt=imsubtract(ima,imdd);
imtt=uint8(imtt);
figure;subplot(121);imshow(imdd);title('开操作');
subplot(122);imshow(imtt);title('顶帽变换');
end

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值