图像锐化算法

图像锐化可以实现边缘增强,凸显细节。

常用的方法有拉普拉斯算子和反锐化掩膜法,两者都可以通过滤波模板实现,非常方便简单。说到滤波模板,也就是空域滤波了,这个PPT对空域滤波的原理阐述得比较清晰:http://pan.baidu.com/s/1qWJmGoO

拉普拉斯算子的介绍:http://www.cnblogs.com/xfzhang/archive/2011/01/19/1939020.htmlhttp://blog.csdn.net/iaccepted/article/details/41869685

反锐化掩膜法的介绍:http://blog.csdn.net/laviewpbt/article/details/8945663


拉普拉斯算子的matlab实现 


思路很简单,就是获得滤波模板、高斯模糊、锐化。通过fspecial函数可以轻易获得滤波模板。fspecial函数的用法:http://blog.csdn.net/wyl_steven/article/details/6314959

fspecial只能生成3*3的模板,锐化性能有限,还需要从原理上理解怎么生产拉普拉斯模板。其实拉普拉斯算子就是一个二阶微分的公式,其滤波模板只是对公式的一种近似,为了简化运算过程,所以,拉普拉斯算子的锐化能力是非常有限的,当然你可以加大模板中心的权重,但这会导致锐化过度,违反了图像增强的原则——图像失真了。


利用filter2函数对图像进行空域滤波。

 img = imread('test1.jpg');
% img = imread('test.jpg');
%     Hg = fspecial('gaussian',[3 3],1);
%  for channel=1:3
%    img0 = img(:,:,channel);
%    img0 = double(img0);
%    img0 = filter2(Hg,img0); %smooth
%    img(:,:,channel) = uint8(img0);
%  end
 
 figure(1)
 imshow(img);title('org')
 
 H1 = fspecial('laplacian',0.2);
% H1=[1,1,1;1,-8,1;1,1,1];
 Hg = fspecial('gaussian',[3 3],0.5);
 for channel=1:3
 img0 = img(:,:,channel);
 img0 = double(img0);
 
 img0 = filter2(Hg,img0); %smooth
 img1 = filter2(H1,img0);
 img2 = img0-img1; 

 img(:,:,channel) = uint8(img2);
 end
 
 figure(2)
 imshow(img);title('sharpen')
 
  H1 = fspecial('laplacian',0.2);
% H1=[1,1,1;1,-8,1;1,1,1];
 Hg = fspecial('gaussian',[3 3],0.5);
 for channel=1:3
 img0 = img(:,:,channel);
 img0 = double(img0);
 
 img0 = filter2(Hg,img0); %smooth
 img1 = filter2(H1,img0);
 img2 = img0-img1; 

 img(:,:,channel) = uint8(img2);
 end
 
 figure(3)
 imshow(img);title('sharpen2')


test.jpg: http://pan.baidu.com/s/1eQ8bJl4

test1.jpg:http://pan.baidu.com/s/1eQgXv14

反锐化掩膜法的matlab实现 

反锐化掩膜法(USM)是一种常用的锐化算法,photoshop中就采用了这种算法。它可以说是拉普拉斯算子的加强版,算法具有相当的锐化能力与可控性。

其思路很简单:高通滤波、高频提升、合成。

高通滤波,从原始图像中提取高频成分,从而提取细节(这里可以使用拉普拉斯算子),然后对细节进行一定的增强(增益可调),最后把增强的细节叠加到原始图像中。

这样做的效果不是很好,后来又有改进的方法:

先做高斯模糊(半径可调),提取低频成分;然后把原始图像减去低频成分获得高频成分(间接提取高频);再对高频成分与阈值(阈值可调)比较,比阈值大的才进行增强(提高抗噪声性能);最后叠加。

发现,这样做的效果比较理想。


%USM算法仿真

 img = imread('test.jpg');
%  img = imread('test1.jpg');
 channel = size(img,3);
 figure(1);imshow(img);title('origin');
 
 %USM算法
 radius = 3;        %模糊半径
 amount = 50;       %增益
 threshold = max(img(:))/2;   %阈值
 Hg = fspecial('gaussian',[3 3],radius);    %高斯核
 for i=1:channel
 imgcyp = img(:,:,i);       %多通道分离
 imgcyp = double(imgcyp); 
 imgl = filter2(Hg,imgcyp);	%高斯模糊
 imgh = imgcyp - imgl;      %提取高频成分 
 imgh(abs(imgh)>threshold) = ... %增益
    imgh(abs(imgh)>threshold) * amount;
 imgcyp = imgcyp + imgh;    %叠加
 img(:,:,i) = uint8(imgcyp);
 end
 
 figure(2);imshow(img);title('enhanced');


USM(unsharp mask)锐化之openCV代码



  • 10
    点赞
  • 34
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
Matlab中提供了多种图像的方法,这些算法用于增强图像的边缘和细节,常见的有以下几种: 1. Sobel算子:这是一种简单的边缘检测方法,使用两个邻域的梯度(水平和垂直方向)来估计每个像素的梯度强度。 2. Scharr算子:类似于Sobel,但使用不同的权重,通常在精度上有一定提升。 3. Laplacian算子:通过计算图像中像素值的二阶导数,强调图像的局部变,常用于边缘检测。 4. Unsharp Mask(掩膜):通过对原图像和模糊处理后的图像进行相减,增强对比度,产生效果。 5. Fast Fourier Transform (FFT) :通过将图像从空间域转换到频率域,放大高频部分(即细节),然后逆变换回空间域。 6. 图像金字塔(Image Pyramid):通过构建不同尺度的图像,可以应用更精细的算法来处理不同层次的细节。 7. 高斯滤波器加权拉普拉斯算子:结合高斯模糊来平滑图像,再应用拉普拉斯算子进行,可以避免过度导致的噪声。 当你在Matlab中使用这些算法时,通常会涉及到以下步骤: - 读取或创建图像 - 应用选择的算子 - 可能还需要调整参数以获得最佳效果 - 显示或保存处理后的图像 如果你想要实现具体的操作,可以提供更多信息,比如你希望使用哪种特定的算法,或者你对参数调节有什么疑问。这样我可以为你提供更详细的指导。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值