欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Matlab采用梯度算子、拉普拉斯算子、Sobel算子及Prewitt算子对图像进行锐化

程序员文章站 2022-07-14 11:02:17
...

Matlab采用梯度算子、拉普拉斯算子、Sobel算子及Prewitt算子对图像进行锐化

梯度算子

设图像为f(x,y), 定义为f(x,y)在点(x,y)的梯度矢量为G[f(x,y)]:
Matlab采用梯度算子、拉普拉斯算子、Sobel算子及Prewitt算子对图像进行锐化
性质:
1)梯度的方向是在f(x,y)的最大变化率方向上
2)梯度的幅度用G[f(x,y)]表示:
Matlab采用梯度算子、拉普拉斯算子、Sobel算子及Prewitt算子对图像进行锐化
梯度
对于数字图像:
Matlab采用梯度算子、拉普拉斯算子、Sobel算子及Prewitt算子对图像进行锐化
简化为:
Matlab采用梯度算子、拉普拉斯算子、Sobel算子及Prewitt算子对图像进行锐化
Roberts梯度(交叉梯度)
对于数字图像:
Matlab采用梯度算子、拉普拉斯算子、Sobel算子及Prewitt算子对图像进行锐化
简化为:
Matlab采用梯度算子、拉普拉斯算子、Sobel算子及Prewitt算子对图像进行锐化

拉普拉斯算子

拉普拉斯算子:

线性、各向同性(旋转不变)Matlab采用梯度算子、拉普拉斯算子、Sobel算子及Prewitt算子对图像进行锐化
Matlab采用梯度算子、拉普拉斯算子、Sobel算子及Prewitt算子对图像进行锐化
对于数字图像f(i,j),其一阶导数:
Matlab采用梯度算子、拉普拉斯算子、Sobel算子及Prewitt算子对图像进行锐化
二阶偏导数为:
Matlab采用梯度算子、拉普拉斯算子、Sobel算子及Prewitt算子对图像进行锐化
拉普拉斯算子模板表示
Matlab采用梯度算子、拉普拉斯算子、Sobel算子及Prewitt算子对图像进行锐化Matlab采用梯度算子、拉普拉斯算子、Sobel算子及Prewitt算子对图像进行锐化
Matlab采用梯度算子、拉普拉斯算子、Sobel算子及Prewitt算子对图像进行锐化
注意:
1)有时g(x,y)输出小或为负
2)有时g(x,y)的增强可能超出范围,需要变回0~L-1尺度中

Robel算子

基本思想
以待增强图像的任意像素(i,j)为中心,截取一个3X3的像素窗口,先分别计算窗口中像素在x,y方向的梯度:
Matlab采用梯度算子、拉普拉斯算子、Sobel算子及Prewitt算子对图像进行锐化
Matlab采用梯度算子、拉普拉斯算子、Sobel算子及Prewitt算子对图像进行锐化
增强后(i,j)点的亮度:
Matlab采用梯度算子、拉普拉斯算子、Sobel算子及Prewitt算子对图像进行锐化
可简化为:
Matlab采用梯度算子、拉普拉斯算子、Sobel算子及Prewitt算子对图像进行锐化
优点
1)由于引入了加权平均,所以对图像中的随机噪声具有一定的平滑作用
2)由于采用间隔两行或两列的查分,边缘两侧的像素得到增强,锐化图像的边缘显得粗而亮
S_x,S_y可用卷积模板来实现:
Matlab采用梯度算子、拉普拉斯算子、Sobel算子及Prewitt算子对图像进行锐化
Matlab采用梯度算子、拉普拉斯算子、Sobel算子及Prewitt算子对图像进行锐化
可见:其重点放在接近于模板中心的像素点

Prewitt算子

基本思想
与Sobel算子相同,方程的形式相同,但其中系数不同:
Matlab采用梯度算子、拉普拉斯算子、Sobel算子及Prewitt算子对图像进行锐化
Matlab采用梯度算子、拉普拉斯算子、Sobel算子及Prewitt算子对图像进行锐化
Matlab采用梯度算子、拉普拉斯算子、Sobel算子及Prewitt算子对图像进行锐化
可见:与Sobel算子不同,其重点没有放在接近于模板中心的像素点

整体程序:

clc;
clear all;
img = imread('F:\1.jpg');
img = rgb2gray(img);
subplot(2,3,1);
imshow(img);
title('原始图像');
[m,n] = size(img);
T = 20;

%Roberts算子
imgr = zeros(m,n);
for i=2:m-1
    for j=2:n-1
        imgr(i,j)= abs(img(i,j)-img(i+1,j+1)) + abs(img(i+1,j)-img(i,j+1));
        if imgr(i,j)<T
            imgr(i,j) = 0;
        else
            imgr(i,j) = 255;
        end
    end
end
subplot(2,3,2);
imshow(imgr);
title('Roberts算子图像');

%Laplace算子
imgl = zeros(m,n);
for i=2:m-1
    for j=2:n-1
        imgl(i,j)= abs(img(i+1,j)+img(i-1,j)+img(i,j+1)+img(i,j-1)-4*img(i,j));
        if imgl(i,j)<T
            imgl(i,j) = 0;
        else
            imgl(i,j) = 255;
        end
    end
end
subplot(2,3,3);
imshow(imgl);
title('Laplace算子图像');

%Sobel算子
imgs = zeros(m,n);
for i=2:m-1
    for j=2:n-1
        imgs(i,j)= abs(img(i-1,j+1)+2*img(i,j+1)+img(i+1,j+1)-img(i-1,j-1)-2*img(i,j-1)-img(i+1,j-1)) + abs(img(i+1,j-1)+2*img(i+1,j)+img(i+1,j+1)-img(i-1,j-1)-2*img(i-1,j)-img(i-1,j+1));
        if imgs(i,j)<T
            imgs(i,j) = 0;
        else
            imgs(i,j) = 255;
        end
    end
end
subplot(2,3,4);
imshow(imgs);
title('Sobel算子图像');

%Prewitt算子
imgp = zeros(m,n);
for i=2:m-1
    for j=2:n-1
        imgp(i,j)= abs(img(i-1,j+1)+img(i,j+1)+img(i+1,j+1)-img(i-1,j-1)-img(i,j-1)-img(i+1,j-1)) + abs(img(i+1,j-1)+img(i+1,j)+img(i+1,j+1)-img(i-1,j-1)-img(i-1,j)-img(i-1,j+1));
        if imgp(i,j)<T
            imgp(i,j) = 0;
        else
            imgp(i,j) = 255;
        end
    end
end
subplot(2,3,5);
imshow(imgp);
title('Prewitt算子图像');

结果显示:

Matlab采用梯度算子、拉普拉斯算子、Sobel算子及Prewitt算子对图像进行锐化