基于matlab的空域图像增强

空域图像增强

基于matlab、 数字图像处理

原理:

空域是指图像平面本身。在空域上,图像处理方法是通过直接对图像像素的处理来实施的。图像增强是将原来不清晰的画面变得清晰或强调某些关注的特征,抑制非关注的特征,使之改善视觉质量、丰富信息量,加强图像判读和识别效果的图像处理方法。
空域处理方法可分为两种:灰度级变换与空域滤波。空域技术所使用的对像素的直接操作可用下式表示:
在这里插入图片描述

其中f(x,y)为输入图像,g(x,y)为输出图像,T是对图像f进行处理的操作符,它定义在像素点(x,y)所指定的空间邻近像区(简称为邻域)内。
定义像素点(x,y)的邻域的主要方法是,使用以(x,y)为中心的方形或矩形像区。当这样的邻域的中心从左上角原点的开始遍历像素点时,将覆盖图像中不同的像区。当T应用于每个被遍历的像素点f(x,y)时,便得到在该像素点的输出图像g(x,y)。在计算g(x,y)时,只使用在(x,y)邻域中的像素。
在处理灰度图像并且当邻域大小为1×1时,T的形式最简单,它成为一个灰度(或亮度)级的变化函数(即,灰度变换)。此时,g(x,y)的值仅由在(x,y)处的亮度f(x,y)来决定。由于灰度变换T仅取决于灰度的值,与(x,y)无关,所以T可写成如下的简单形式:
在这里插入图片描述

其中,r表示图像f中相应点(x,y)的灰度,s表示图像g中相应点(x,y)的灰度。
灰度变换T通常包括灰度变换增强与直方图增强。灰度变换增强可以通过改变图象的灰度范围及分布来实现。在实际应用中,为了突出图像中感兴趣的研究对象,常常要求局部扩展拉伸某一范围的灰度值,或对不同范围的灰度值进行不同的拉伸处理,即分段拉伸。另一方面,直方图增强是以累积分布函数变换为基础的直方图修正法。
在图像采集过程中不可避免的混入了噪声,这种实际得到的图像视觉品质有待进一步提高。为此,利用空域滤波来消除图像中的噪声,突出图像中目标物体的某些特点,都将有利于对图像中目标的描述、识别和理解。空域滤波采用模板卷积的计算方法,直接在图像所在的二维空域进行增强处理,即增强构成图像的像素,包括图像平滑和图像锐化等。平滑采用低通滤波(即只让低频信号通过)的方法,可去掉图像中的噪声;锐化采用高通滤波(即只让高频信号通过)的方法,则可增强边缘等高频信号,使模糊的图像变得清晰。

实现功能:

1、灰度变换
2、直方图均衡化
3、图像平滑空域滤波
4、图像锐化空域滤波

实现代码:
//读取及显示图像
function f = ReadShow(image)
%ReadShow 读入图像数据,如果是彩色图像,将其转换为灰度图输出
Readimage=imread(image);
Image_size=size(Readimage);%size函数返回矩阵的行列数,若为彩色图,则返回值形式为[a,b,c],若为灰度图,则返回值形式为[a,b]
count=numel(Image_size);%numel函数返回数组的元素总个数,彩色图为3,灰度图为2
if(count==3)
    f=rgb2gray(Readimage);%函数rgb2gary将彩图转为灰度图
    figure;%生成一个新窗口
    subplot(1,2,1);%subplot(m,n,p)将figure划分成m*n块,在第p块创建坐标系
    imshow(Readimage),title('彩图');
    subplot(1,2,2);
    imshow(f),title('灰度图');
end
if(count==2)
    figure;
    f=Readimage;
    imshow(f,'InitialMagnification','fit'),title('灰度图');%显示适当大小的图像,防止区域浪费或图片过大显示不完整
end
end

//灰度变换的基本代码:
//灰度线性变换
function g1 = LinearTrans(image)
%LinearTrans 对输入图像进行灰度线性变换
f=ReadShow(image);
figure;                            %产生图形窗口
subplot(3,2,1)
imshow(f),title('灰度图');
subplot(3,2,2)
imhist(f,256);                     %显示图像直方图(256个分组)
title('灰度图的直方图');
g1=imadjust(f,[0 1],[1 0]);        %灰度转换,实现明暗转换(负片图像)
subplot(3,2,3)
imshow(g1),title('灰度图的负片图像');
subplot(3,2,4)
imhist(g1,256); 
title('负片图像的直方图');
g2=imadjust(f,[0;1],[0;0.75],1); %将f的[0.5,0.75]线性映射到g2的[0,1]
subplot(3,2,5)
imshow(g2),title('灰度级的线性变换');
subplot(3,2,6)
imhist(g2,256); 
title('线性变换的直方图');
end

//灰度非线性变换(对数映射)
function f = Nonlineartrans(image)
%Nonlineartrans 实现对灰度图的非线性变换(对数变换)
%将图像的低灰度值部分扩展,高灰度值部分压缩,使低值灰度的图像细节更容易看清,从而达到增强的效果。
f=ReadShow(image); 
figure;                        %产生图形窗口
subplot(2,2,1)
imshow(f),title('灰度图');
g1=log(1+double(f));             %对输入图像f进行对数映射变换
g2=mat2gray(g1);                %将矩阵g1转换为灰度图片([0,1])
g3=im2uint8(g2);                %将灰度图转换为8位图
subplot(2,2,2)
imhist(f,256),title('变换前的直方图');
subplot(2,2,3)
imshow(g3),title('灰度级的对数变换');
subplot(2,2,4)
imhist(g3,256),title('变换后的直方图');
end

//直方图均衡化
function f = Equalization(image)
%Equalization 实现直方图的均衡化
%通过将输入图像的灰度级扩展到全灰度范围,以实现图像增强的目的
f=ReadShow(image);
figure;                        %产生图形窗口
subplot(2,2,1)
imshow(f),title('灰度图');
subplot(2,2,2)
imhist(f,64);                  %显示图像直方图(64个分组)
title('灰度图的直方图');
g1=histeq(f);                  %直方图均衡化,产生64个灰度级的结果图像g1
subplot(2,2,3)
imshow(g1),title('均衡化的灰度图');
subplot(2,2,4)
imhist(g1,64), title('均衡图的直方图');                 %显示图像直方图(64个分组)
end

//均值滤波
function f = Average(image)
%Average  用于实现线性空域滤波器(均值滤波器)
f = ReadShow(image);
figure                              %产生图形窗口
subplot(3,3,1)
imshow(f),title('灰度图');
g1 = imnoise(f,'gaussian',0,0.05);  %添加高斯噪声:均值0,方差0.05
subplot(3,3,2)
imshow(g1),title('灰度图+高斯噪声'); 
w = ones(3)/(3*3);                   %产生3×3均值平滑模板,也可用函数fspecial来生成,f2=fspecial('average',3);
g2 = imfilter(g1, w);                %默认相关运算(corr),默认边界充零(zeors)
subplot(3,3,4)
imshow(g2),title('3*3+充零边界');
g2 = imfilter(g1, w, 'symmetric');   %按镜像对称来填充边界
subplot(3,3,7)
imshow(g2),title('3*3+对称边界');
f3=fspecial('average',5);%滤波器尺寸5*5
g3=imfilter(g1,f3); 
subplot(3,3,5)
imshow(g3),title('5*5+充零边界');
g3=imfilter(g1,f3,'symmetric');
subplot(3,3,8)
imshow(g3),title('5*5+对称边界');
f4=fspecial('average',7);%滤波器尺寸5*5
g4=imfilter(g1,f4); 
subplot(3,3,6)
imshow(g4),title('7*7+充零边界');
g4=imfilter(g1,f4,'symmetric');
subplot(3,3,9)
imshow(g4),title('7*7+对称边界');
end

//中值滤波
function f = MedianFilter(image)
%MedianFilter 用于实现非线性空域滤波器(中值滤波器)
f=ReadShow(image);                      
subplot(3,3,1)
imshow(f),title('灰度图');
g1 = imnoise(f, 'salt & pepper', 0.2);%添加椒盐噪声:方差0.2
subplot(3,3,2)
imshow(g1),title('灰度图+椒盐噪声');
g2 = medfilt2(g1);                   %默认中值滤波:3×3模板,边界充零
subplot(3,3,4)
imshow(g2),title('3*3+充零边界');
g2 = medfilt2(g1, 'symmetric');      %按镜像对称来填充边界
subplot(3,3,7)
imshow(g2),title('3*3+对称边界');
g3 = medfilt2(g1,[5 5]);                   %默认中值滤波:5*5模板,边界充零
subplot(3,3,5)
imshow(g3),title('5*5+充零边界');
g3 = medfilt2(g1,[5 5],'symmetric');      %按镜像对称来填充边界
subplot(3,3,8)
imshow(g3),title('5*5+对称边界');
g4 = medfilt2(g1,[7 7]);                   %默认中值滤波:7*7模板,边界充零
subplot(3,3,6)
imshow(g4),title('7*7+充零边界');
g4 = medfilt2(g1,[7 7],'symmetric');      %按镜像对称来填充边界
subplot(3,3,9)
imshow(g4),title('7*7+对称边界');
end

//锐化空域滤波-拉普拉斯(Laplacian)算子滤波:
function f = Sharpen(image)
% Sharpen 用于实现锐化空域滤波-拉普拉斯(Laplacian)算子滤波
f = ReadShow(image);
ff = single(f);                         %转换为浮点数
h0 = fspecial('gaussian', 3, 0.5);      %产生3×3高斯平滑模板,标准差0.5
ff = imfilter(ff, h0, 'replicate');     %高斯平滑滤波
fu = uint8(ff);                         %转换为8位图像
figure                                  %产生图形窗口
subplot(3,3,1)
imshow(f),title('原始灰度图');
subplot(3,3,2)
imshow(ff,[]),title('平滑灰度图');
h1 = fspecial('laplacian', 0)           %产生3×3标准拉氏算子模板
g1 = imfilter(fu, h1, 'replicate');     %标准拉氏算子滤波(均为正)
subplot(3,3,4)
imshow(g1),title('标准拉氏算子(均为正)');
g2 = imfilter(ff, h1, 'replicate');     %标准拉氏算子滤波(有正有负)
subplot(3,3,5)
imshow(g2,[]),title('标准拉氏算子(有正有负)');
ff_g2 = uint8(ff - g2);                 %标准拉氏算子边缘增强图像
subplot(3,3,6)
imshow(ff_g2),title('标准拉氏边缘增强');                                
h2 = [1 1 1; 1 -8 1; 1 1 1]             %手工产生3×3对角线拉氏算子模板
g1 = imfilter(fu, h2, 'replicate');     %对角线拉氏算子滤波(均为正)
subplot(3,3,7)
imshow(g1),title('对角拉氏算子(均为正)');
g2 = imfilter(ff, h2, 'replicate');     %对角线拉氏算子滤波(有正有负)
subplot(3,3,8)
imshow(g2,[]),title('对角拉氏算子(有正有负)');
ff_g2 = uint8(ff - g2);                 %对角线拉氏算子边缘增强图像
subplot(3,3,9)
imshow(ff_g2),title('对角拉氏边缘增强');
end

上述代码需要书写对应的测试函数:

clc,clear;   %清空命令窗口,清空工作空间的变量
ReadShow('moon.tif');
ReadShow('pollen.tif');
ReadShow('lena.jpg');
LinearTrans('blob.tif');
Nonlineartrans('point.tif');
Equalization('pollen.tif');
Average('lena.jpg');
MedianFilter('lena.jpg');
Sharpen('moon.tif');
处理效果:

1、彩色图像读入处理:
将彩色图片转为灰度图
2、灰度变换:
(1)线性变换
线性变换

(2)非线性变换
非线性变换
解释:
灰度变换其本质是按照一定的规则修改每个像素的灰度,从而改变图像的动态范围实现期望的增强效果。线性灰度变换:将输入图像灰度值的动态范围按线性关系公式拉伸扩展至指定范围或整个动态范围,可突出感兴趣目标,抑制不感兴趣的目标,可以有效地改善图像视觉效果。非线性变换中的对数变换常用来扩展低值灰度,压缩高值灰度,这样可以使低值灰度的图像细节更容易看清,从而达到增强的效果。

3、直方图均衡化:
直方图均衡化
解释:
直方图均衡化是通过输入图像的灰度级扩展到全灰度范围,以实现图像增强,即把输入图像的像素集中的灰度级拉宽,而把像素稀疏的灰度级压缩,使非均匀直方图拉平为均匀直方图,由此获得输出图像。上图中花粉照片灰度级较集中于低的一侧,均衡化后相对较均匀的分散开了,直观上可以看出,如果一帧图像其像素在全部可能的灰度级上均匀分布,则这样的图像有高对比度和丰富的灰度色调,输出的图像有更好的视觉效果。

4、图像平滑空域滤波:
(1)线性空域滤波器:均值滤波加高斯噪声:
均值滤波加高斯噪声
(2)非线性空域滤波器:中值滤波加椒盐噪声:
中值滤波加椒盐噪声
解释:
高斯噪声特点:噪声的概率密度函数服从高斯分布(即正态分布),即某个强度的噪声点个数最多,离这个强度越远噪声点个数越少。高斯噪声是一种加性噪声,即噪声直接加到原图像上,因此可以用线性滤波器滤除。
椒盐噪声:由图像传感器、传输信道、解码处理等产生的黑白相间的亮暗点噪声,往往由图像切割引起。椒盐噪声是指两种噪声,盐噪声(高灰度噪声)、胡椒噪声(低灰度噪声)。同时出现时,在图像上呈现为黑白杂点。
均值滤波采用线性的方法,平均整个窗口范围内的像素值,均值滤波本身存在着固有的缺陷,即它不能很好地保护图像细节,在图像去噪的同时也破坏了图像的细节部分,从而使图像变得模糊,不能很好地去除噪声点。均值滤波对高斯噪声表现较好,对椒盐噪声表现较差。
中值滤波采用非线性的方法,它在平滑脉冲噪声方面非常有效,同时它可以保护图像尖锐的边缘,选择适当的点来替代污染点的值,所以处理效果好,对椒盐噪声表现较好,对高斯噪声表现较差。
总之,通过实验可以看出均值滤波器对高斯噪声有较好的处理效果,中值滤波器对椒盐噪声有较好的处理效果。同时,滤波的效果也与滤波器的尺寸相关,随着滤波器尺寸的增加,图像中的细节(包括噪声)部分逐渐消失,但是并非是滤波器的尺寸越大越好,我们应该根据实际情况选择最佳尺寸。

5、图像锐化空域滤波:
图像锐化空域滤波
解释:
平滑滤波器用于去除图像中的细节部分,锐化滤波器则用于强调或突出图像中的细节,即降低图像的模糊程度,突出图像中物体的边缘,通过实验可以看出,上图中在最终锐化的图像中边缘和细节变得更加明显。

完整资源图片代码下载:空域图像增强资源包

  • 13
    点赞
  • 78
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 基于Matlab的图像数字水印篡改检测算法是一种利用Matlab软件来实现的图像处理算法,用于检测和解析图像中的数字水印的篡改情况。 首先,算法会加载原始图像和水印图像,并对它们进行预处理,包括调整大小、灰度化和平滑化等操作。接着,它会使用一种可逆的离散余弦变换(DCT)来将原始图像和水印图像分块,并对每个图像块进行变换操作,将其转化为频域表示。 然后,算法会对每个频域系数进行分析和处理,将原始图像的高频系数与水印图像的低频系数进行融合,以实现对水印的嵌入。此过程中,算法会根据水印的特性和图像的统计特征来确定嵌入的位置和强度。嵌入完成后,算法会对图像进行反变换,将频域表示转化为空域表示,并输出嵌入水印后的图像。 最后,基于Matlab的算法还能够检测和解析图像中的数字水印的篡改情况。这是通过对嵌入水印后的图像进行拓展和处理来实现的,包括嵌入鲁棒水印和提取鲁棒水印等操作。通过对比原始水印图像和提取的水印图像之间的差异,算法可以检测到图像是否被篡改,以及篡改的位置和强度等信息。 总而言之,基于Matlab的图像数字水印篡改检测算法能够实现图像水印的嵌入和提取,并能够检测图像的篡改情况,是一种较为有效的图像处理算法。 ### 回答2: 基于MATLAB的图像数字水印篡改检测算法是一种通过分析图像的特征和水印嵌入的方式来检测和判断图像是否被篡改的方法。 首先,该算法使用MATLAB提供的图像处理工具包中的函数来读取图像并转换为数字矩阵,以便后续处理和分析。 其次,算法根据水印嵌入的方式,以及水印本身的特征,对图像进行预处理。这包括对图像进行滤波、变换等操作,以增强水印的鲁棒性和提取性能。 然后,算法对预处理后的图像进行特征提取。这包括使用各种图像特征描述子(如颜色直方图、纹理特征等)来描述图像的内容。同时,也会提取水印本身的特征(如水印的大小、形状、频率等)。 接下来,算法使用机器学习或人工智能技术来建立一个分类器模型。该模型可以通过训练一组已知是否被篡改的图像样本,来学习如何判断一个图像是否被篡改。常用的分类器模型包括支持向量机(SVM)、人工神经网络(ANN)等。 最后,算法使用训练好的分类器模型对新的图像进行判断。当一个图像被输入算法时,算法会根据预处理、特征提取和分类器模型等步骤,判断图像是否被篡改并输出判断结果。 总之,基于MATLAB的图像数字水印篡改检测算法通过对图像的特征和水印进行分析和判断,能够在一定程度上识别图像的篡改。然而,这种算法还是有其局限性,如无法检测到不可见水印或高级的篡改技术。因此,在实际应用中,需要结合其他方法和工具来提高检测准确性和鲁棒性。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值