梯度/索贝尔/拉普拉斯算子实现图像锐化(Matlab)

文章首发及后续更新:https://mwhls.top/2264.html
新的更新内容请到mwhls.top查看。
无图/无目录/格式错误/更多相关请到上方的文章首发页面查看。

目的
  • 使用梯度算子、索贝尔算子、拉普拉斯算子对图像锐化
思路
  • 用矩阵表示算子。
  • 遍历图像,以每个像素点为中心的33/22矩阵为待处理数据,
  • 将算子矩阵与待处理矩阵点乘,求和结果矩阵,以其作为矩阵中心点的新值。
实验结果
  • 从上到下,从左到右依次为:原图、梯度算子、索贝尔算子、拉普拉斯算子
代码

clear;
ima = imread('lena_color.jpg');
grayIma = rgb2gray(ima);
[height, width] = size(grayIma);
gradientOperatorX = ([-1 1; 0 0]);
gradientOperatorY = ([-1 0; 1 0]);
sobelOperatorX = [-1 0 1; -2 0 2; -1 0 1];
sobelOperatorY = [-1 -2 -1; 0 0 0; 1 2 1];
laplacianOperator = [0 1 0; 1 -4 1; 0 1 0];


imaGradient = grayIma;
imaSobel = grayIma;
imaLaplacian = grayIma;

for row = 1:height-1
    for col = 1:width-1
        %梯度
        temp = double(grayIma(row:row+1, col:col+1));
        tempX = gradientOperatorX .* temp;
        tempX = abs(sum(tempX(:)));
        tempY = gradientOperatorY .* temp;
        tempY = abs(sum(tempY(:)));
        imaGradient(row, col) =  tempX + tempY;
        if row~=1 && col~=1 
            %索贝尔
            temp = double(grayIma(row-1:row+1, col-1:col+1));
            tempX = sobelOperatorX .* temp;
            tempX = abs(sum(tempX(:)));
            tempY = sobelOperatorY .* temp;
            tempY = abs(sum(tempY(:)));
            imaSobel(row, col) = tempX + tempY;
            %拉普拉斯
            tempX = laplacianOperator .* temp;
            tempX = abs(sum(tempX(:)));
            imaLaplacian(row, col) = tempX;
        end
    end
end

subplot(2,2,1);
imshow(grayIma);
subplot(2,2,2);
imshow(imaGradient);
subplot(2,2,3);
imshow(imaSobel);
subplot(2,2,4);
imshow(imaLaplacian);

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值