基于Matlab的图片平滑和锐化处理

2024-04-17 17:32

本文主要是介绍基于Matlab的图片平滑和锐化处理,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

在本实验中我分别采用了系统自带的fspecial函数和自己编写的均值平滑模板和两个锐化模板进行图片处理。

目录

空间域平滑增强

空间域锐化增强


空间域平滑增强

实验要求:采用均值平滑模板对图片进行处理,得到去除噪声后的图像,并使用平滑模板滤波2-3次,比较实验结果。

使用Matlab自带函数 fspecial() 的average模式:

clc;
clear;
close all;%使用自带函数
Picture=imread('lena_noise.bmp');
subplot(1,4,1);imshow(Picture,[]);title('原图');
Tem_Smooth=fspecial('average',[3,3]);
P_Smooth1=imfilter(Picture,Tem_Smooth);
subplot(1,4,2);imshow(P_Smooth1,[]);title('均值滤波一次后图像');
P_Smooth2=imfilter(P_Smooth1,Tem_Smooth);
subplot(1,4,3);imshow(P_Smooth2,[]);title('均值滤波二次后图像');
P_Smooth3=imfilter(P_Smooth2,Tem_Smooth);
subplot(1,4,4);imshow(P_Smooth3,[]);title('均值滤波三次后图像');

自己编写均值滤波函数:

function F=averfilter(x,n) %x为输入的图像,n为均值模板大小(n×n)
a(1:n,1:n)=1;
[height,width]=size(x);
x1=double(x); %将图像信息流设为double格式
x2=x1;
for i=1:height-n+1   %由于是在n×n大小的像素组中从最左上角的开始计算,因此在范围限制上去除最后两行for j=1:width-n+1  %去除最后两列b=x1(i:i+(n-1),j:j+(n-1)).*a;s=sum(sum(b));x2(i+(n-1)/2,j+(n-1)/2)=s/(n*n); %在n×n大小的空间内的中心像素被赋值end
end
F=uint8(x2);%将信息范围强制转换为0-255内

与系统自带函数进行结果比对:

上面一行为fspecial()的average格式下的处理结果,下面一行为自己编写的均值滤波函数的处理结果。效果还行,只是对比度比fspecial函数处理后的稍低一些。

 

空间域锐化增强

实验要求:分别采用一阶微分算子Sobel算子和二阶微分算子拉普拉斯算子进行锐化滤波,并比较两种不同的锐化滤波模板处理后的结果。

Sobel算子拉普拉斯算子

 使用系统自带函数 fspecial() 的 sobel 和 laplacian 模式:

figure;
Picture2=imread('moon.bmp');
subplot(1,3,1);imshow(Picture2,[]);title('原图');
Tem_Sharpen1=fspecial('sobel');
P_Sharpen1=imfilter(Picture2,Tem_Sharpen1);
subplot(1,3,2);imshow(P_Sharpen1,[]);title('采用sobel算子锐化后图像');
Tem_Sharpen2=fspecial('laplacian');
P_Sharpen2=imfilter(Picture2,Tem_Sharpen2);
subplot(1,3,3);imshow(P_Sharpen2,[]);title('采用拉普拉斯算子锐化后图像');

 自己编写Sobel算子锐化模板函数:

function F=Sobelfilter(x)
a=[-1,-2,-1;0,0,0;1,2,1];  %Sobel算子第一个3×3矩阵
b=[-1,0,1;-2,0,2;-1,0,1];  %Sobel算子第二个3×3矩阵
[height,width]=size(x);
x1=double(x);
x2=x1;
for i=1:height-3+1for j=1:width-3+1c=x1(i:i+(3-1),j:j+(3-1)).*a;d=x1(i:i+(3-1),j:j+(3-1)).*b;x2(i:i+(3-1),j:j+(3-1))=sqrt(c^2+d^2);  %一般赋值两个矩阵相乘结果平方的开方end
end
F=uint8(x2);

自己编写的Laplacian算子锐化模板函数:

function B=LaplacianFilter(x)
x=im2double(x);
[height,width]=size(x);
B=zeros(size(x));
for i=2:height-1    %在编写这个函数时以最中心位置的像素为基准x(i,j),因此范围从第2行第2列变换到倒数第二行和倒数第二列for j=2:width-1B(i,j)=-x(i+1,j)-x(i-1,j)-x(i,j+1)-x(i,j-1)+8*x(i,j)-x(i-1,j-1)-x(i-1,j+1)-x(i+1,j-1)-x(i+1,j+1);      %直接进行矩阵相乘end
end
B=im2uint8(B);

实验结果比对:

上面一行为fspecial()的处理结果,下面一行为自己编写的滤波函数的处理结果。

 另外我采用上面的laplacian算子函数的编写方法另外写了Sobel算子的锐化模板函数,处理结果如下,与fspecial函数处理结果有较大差别,因此并未采用。

function C=Sobel(x)
x=double(x);
[height,width]=size(x);
B=zeros(size(x));
C=zeros(size(x));
for i=2:height-1for j=2:width-1B(i,j)=-x(i-1,j-1)-2*x(i-1,j)-x(i-1,j+1)+x(i+1,j-1)+2*x(i+1,j)+x(i+1,j+1);C(i,j)=-B(i-1,j-1)+B(i-1,j+1)-2*B(i,j-1)+2*B(i,j+1)-B(i+1,j-1)+B(i+1,j+1);end
end
C=uint8(C);

这篇关于基于Matlab的图片平滑和锐化处理的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/912426

相关文章

解决docker目录内存不足扩容处理方案

《解决docker目录内存不足扩容处理方案》文章介绍了Docker存储目录迁移方法:因系统盘空间不足,需将Docker数据迁移到更大磁盘(如/home/docker),通过修改daemon.json配... 目录1、查看服务器所有磁盘的使用情况2、查看docker镜像和容器存储目录的空间大小3、停止dock

5 种使用Python自动化处理PDF的实用方法介绍

《5种使用Python自动化处理PDF的实用方法介绍》自动化处理PDF文件已成为减少重复工作、提升工作效率的重要手段,本文将介绍五种实用方法,从内置工具到专业库,帮助你在Python中实现PDF任务... 目录使用内置库(os、subprocess)调用外部工具使用 PyPDF2 进行基本 PDF 操作使用

uni-app小程序项目中实现前端图片压缩实现方式(附详细代码)

《uni-app小程序项目中实现前端图片压缩实现方式(附详细代码)》在uni-app开发中,文件上传和图片处理是很常见的需求,但也经常会遇到各种问题,下面:本文主要介绍uni-app小程序项目中实... 目录方式一:使用<canvas>实现图片压缩(推荐,兼容性好)示例代码(小程序平台):方式二:使用uni

分析 Java Stream 的 peek使用实践与副作用处理方案

《分析JavaStream的peek使用实践与副作用处理方案》StreamAPI的peek操作是中间操作,用于观察元素但不终止流,其副作用风险包括线程安全、顺序混乱及性能问题,合理使用场景有限... 目录一、peek 操作的本质:有状态的中间操作二、副作用的定义与风险场景1. 并行流下的线程安全问题2. 顺

Python异常处理之避免try-except滥用的3个核心原则

《Python异常处理之避免try-except滥用的3个核心原则》在Python开发中,异常处理是保证程序健壮性的关键机制,本文结合真实案例与Python核心机制,提炼出避免异常滥用的三大原则,有需... 目录一、精准打击:只捕获可预见的异常类型1.1 通用异常捕获的陷阱1.2 精准捕获的实践方案1.3

Pandas处理缺失数据的方式汇总

《Pandas处理缺失数据的方式汇总》许多教程中的数据与现实世界中的数据有很大不同,现实世界中的数据很少是干净且同质的,本文我们将讨论处理缺失数据的一些常规注意事项,了解Pandas如何表示缺失数据,... 目录缺失数据约定的权衡Pandas 中的缺失数据None 作为哨兵值NaN:缺失的数值数据Panda

C++中处理文本数据char与string的终极对比指南

《C++中处理文本数据char与string的终极对比指南》在C++编程中char和string是两种用于处理字符数据的类型,但它们在使用方式和功能上有显著的不同,:本文主要介绍C++中处理文本数... 目录1. 基本定义与本质2. 内存管理3. 操作与功能4. 性能特点5. 使用场景6. 相互转换核心区别

Python动态处理文件编码的完整指南

《Python动态处理文件编码的完整指南》在Python文件处理的高级应用中,我们经常会遇到需要动态处理文件编码的场景,本文将深入探讨Python中动态处理文件编码的技术,有需要的小伙伴可以了解下... 目录引言一、理解python的文件编码体系1.1 Python的IO层次结构1.2 编码问题的常见场景二

Python函数的基本用法、返回值特性、全局变量修改及异常处理技巧

《Python函数的基本用法、返回值特性、全局变量修改及异常处理技巧》本文将通过实际代码示例,深入讲解Python函数的基本用法、返回值特性、全局变量修改以及异常处理技巧,感兴趣的朋友跟随小编一起看看... 目录一、python函数定义与调用1.1 基本函数定义1.2 函数调用二、函数返回值详解2.1 有返

Android实现图片浏览功能的示例详解(附带源码)

《Android实现图片浏览功能的示例详解(附带源码)》在许多应用中,都需要展示图片并支持用户进行浏览,本文主要为大家介绍了如何通过Android实现图片浏览功能,感兴趣的小伙伴可以跟随小编一起学习一... 目录一、项目背景详细介绍二、项目需求详细介绍三、相关技术详细介绍四、实现思路详细介绍五、完整实现代码