Matlab采用梯度算子、拉普拉斯算子、Sobel算子及Prewitt算子对图像进行锐化
文章目录
Matlab采用梯度算子、拉普拉斯算子、Sobel算子及Prewitt算子对图像进行锐化梯度算子拉普拉斯算子Robel算子Prewitt算子整体程序:结果显示:梯度算子
设图像为f(x,y), 定义为f(x,y)在点(x,y)的梯度矢量为G[f(x,y)]:
性质:
1)梯度的方向是在f(x,y)的最大变化率方向上
2)梯度的幅度用G[f(x,y)]表示:
梯度
对于数字图像:
简化为:
Roberts梯度(交叉梯度)
对于数字图像:
简化为:
拉普拉斯算子
拉普拉斯算子:
线性、各向同性(旋转不变)
对于数字图像f(i,j),其一阶导数:
二阶偏导数为:
拉普拉斯算子模板表示:
注意:
1)有时g(x,y)输出小或为负
2)有时g(x,y)的增强可能超出范围,需要变回0~L-1尺度中
Robel算子
基本思想:
以待增强图像的任意像素(i,j)为中心,截取一个3X3的像素窗口,先分别计算窗口中像素在x,y方向的梯度:
增强后(i,j)点的亮度:
可简化为:
优点:
1)由于引入了加权平均,所以对图像中的随机噪声具有一定的平滑作用
2)由于采用间隔两行或两列的查分,边缘两侧的像素得到增强,锐化图像的边缘显得粗而亮
S_x,S_y可用卷积模板来实现:
可见:其重点放在接近于模板中心的像素点
Prewitt算子
基本思想:
与Sobel算子相同,方程的形式相同,但其中系数不同:
可见:与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-1for j=2:n-1imgr(i,j)= abs(img(i,j)-img(i+1,j+1)) + abs(img(i+1,j)-img(i,j+1));if imgr(i,j)<Timgr(i,j) = 0;elseimgr(i,j) = 255;endendendsubplot(2,3,2);imshow(imgr);title('Roberts算子图像');%Laplace算子imgl = zeros(m,n);for i=2:m-1for j=2:n-1imgl(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)<Timgl(i,j) = 0;elseimgl(i,j) = 255;endendendsubplot(2,3,3);imshow(imgl);title('Laplace算子图像');%Sobel算子imgs = zeros(m,n);for i=2:m-1for j=2:n-1imgs(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)<Timgs(i,j) = 0;elseimgs(i,j) = 255;endendendsubplot(2,3,4);imshow(imgs);title('Sobel算子图像');%Prewitt算子imgp = zeros(m,n);for i=2:m-1for j=2:n-1imgp(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)<Timgp(i,j) = 0;elseimgp(i,j) = 255;endendendsubplot(2,3,5);imshow(imgp);title('Prewitt算子图像');
结果显示:
如果觉得《Matlab采用梯度算子 拉普拉斯算子 Sobel算子及Prewitt算子对图像进行锐化》对你有帮助,请点赞、收藏,并留下你的观点哦!