加载中…
个人资料
  • 博客等级:
  • 博客积分:
  • 博客访问:
  • 关注人气:
  • 获赠金笔:0支
  • 赠出金笔:0支
  • 荣誉徽章:
正文 字体大小:

Matlab中 imerode/imdilate代码

(2012-09-19 16:13:23)
标签:

matlab

教育

分类: Matlab学习
参考网站http://www.cppblog.com/boob-wang/articles/62940.html有原理详细解释

%A是处理的矩阵 B是结构体 用来对A进行扫描的

%实现的是简单的二值图像的处理灰度图像有待研究

%实现图像的腐蚀已完成 未测试~测试完毕 基本正确

function ans =mimerode(A,B)

 

%初始化

[ha,wa] =size(A);

[hb,wb] =size(B);

origin =[0,0];

ans =zeros(ha,wa);

 

for i = 1:hb

    for j = 1:wb

        if (B(i,j)== 1)

            origin = [i,j];

            break;

        end

    end

end

 

%对矩阵A进行边扩张 以0补充

new_A =zeros(ha+hb*2,wa+wb*2);

for i = 1:ha

    for j = 1:wa

        new_A(i+hb,j+wb) = A(i,j);

    end

end

 

%对矩阵A进行遍历

for i = 1:ha

    for j = 1:wa

        if  A(i,j) == 0

            continue;

        end

        %把B的origin点移到当前处理点 

        %寻找B的影响区域块

        begin_i = i + hb - origin(1);

        begin_j = j + wb - origin(2);

            

        %对矩阵new_A中和重合的B中的元素对比

        for i1 =begin_i:begin_i+hb-1

            for j1 =begin_j:begin_j+wb-1

                flag  = true;

                if (B(i1-begin_i+1,j1-begin_j+1)== 1 & new_A(i1,j1) == 0)

                    flag = false

                    break;

                end

            end

        end

        if flag

        ans(i,j) = 1;

        else

        ans(i,j) = 0;

        end

    end

end

 

%A是处理的矩阵 B是结构体 用来对A进行扫描的

%实现的是简单的二值图像的处理灰度图像有待研究

%实现图像的膨胀已完成 未测试~测试完毕 基本正确

function ans =mimdilate(A,B)

 

%初始化

[ha,wa] =size(A);

[hb,wb] =size(B);

origin =[0,0];

ans =zeros(ha,wa);

 

for i = 1:hb

    for j = 1:wb

        if (B(i,j)== 1)

            origin = [i,j];

            break;

        end

    end

end

 

%对矩阵A进行边扩张 以0补充

new_A =zeros(ha+hb*2,wa+wb*2);

for i = 1:ha

    for j = 1:wa

        new_A(i+hb,j+wb) = A(i,j);

    end

end

 

%对矩阵A进行遍历

for i = 1:ha

    for j = 1:wa

        if  A(i,j) == 0

            continue;

        end

        %把B的origin点移到当前处理点 

        %寻找B的影响区域块

        begin_i = i + hb - origin(1);

        begin_j = j + wb - origin(2);

            

        %对矩阵new_A中和重合的B中的元素对比

        for i1 =begin_i:begin_i+hb-1

            for j1 =begin_j:begin_j+wb-1

                flag  = false;

                if(B(i1-begin_i+1,j1-begin_j+1) == 1 & new_A(i1,j1) == 1 & ~((i1 == i+hb)& (j1 == j+hb)))

                    flag = true;

                    break;

                end

            end

        end

        if flag

        ans(i,j) = 1;

        else

        ans(i,j) = 0;

        end

    end

end

0

阅读 收藏 喜欢 打印举报/Report
  

新浪BLOG意见反馈留言板 欢迎批评指正

新浪简介 | About Sina | 广告服务 | 联系我们 | 招聘信息 | 网站律师 | SINA English | 产品答疑

新浪公司 版权所有