【学习笔记】Matlab自编图像卷积函数

图像卷积原理

卷积

代码

%卷积函数
%made by yao
function result = myconv(kernel,img)
    [k,num] = size(kernel);
    %判断传入的数组是否为双精度浮点型,否则进行类型转换
    if ~isa(img,'double')
        p1 = double(img);
    else
        p1 = img;
    end
    %提取尺寸
    [m,n] = size(p1);
    %构造卷积之后的模板
    %这里考虑到边缘的问题,所以把黑边裁剪掉了
    result = zeros(m-k+1,n-k+1);
    for i = ((k-1)/2+1):(m-(k-1)/2)
        for j = ((k-1)/2+1):(n-(k-1)/2)
            result(i-(k-1)/2,j-(k-1)/2) = sum(sum(kernel .* p1(i-(k-1)/2:i+(k-1)/2,j-(k-1)/2:j+(k-1)/2)));
        end
    end
end

这里举个例子,比方说我们有3x3的卷积核,对图像进行卷积,那么在(1,1)的时候,就会连带着对图像边缘外面(包括上边一行和左边的一列,同理图像下边和右边也会出现同样的情况)。
所以为了避免这种情况,就要把3x3的卷积核卷积的起始点定在(2,2)处。若图像有m列n行,那么一行的卷积终止出就在n-1出,一列的卷积终止点在m-1处。
同理,5x5以及更长的卷积核也是同样的操作。
5x5的卷积核起始点在(3,3),终止点(m-2,n-2)。
所以对于奇数的卷积核,设卷积核长度为k,那么起始卷积点就是((k-1)/2+1),终止点(m-(k-1)/2)(行列都是一样的,换一下就好)。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值