8 图像去噪 滤波 锐化 边缘检测案例(matlab程序)

news/2024/7/21 6:03:41 标签: matlab, 开发语言, 图像处理, 计算机视觉, 学习

1.简述

       学习目标:一个图像处理的经典综合案例

一、图像锐化的原理
  图像锐化的目的是凸显物体的细节轮廓,通常可以用梯度、Laplace算子和高通滤波来实现,下面一一说明:

1、梯度法
梯度计算可以参考 小白学习图像处理——canny边缘检测算法 ,假设Gx为x方向的方向导数,Gy为y方向的方向导数,那么梯度就是Gx和Gy的平方和开根号:
G = [ G x 2 + G y 2 ] 2 G = [Gx^2 + Gy^2]^2
G=[Gx 
2
 +Gy 
2
 ] 
2
 

其中,计算Gx和Gy的过程就是用一个预先定义的矩阵和图像做一次二维卷积,我们把这个预先定义的矩阵成为模板算子,计算Gx和Gy的算子有很多种。

二、边缘检测
  在matlab中预置了一些算子,如:roberts、sobel、prewitt、log 和 canny 算子等

1、图像的线段检测
  首先谈谈图像线段的检测,线段检测的原理类似梯度,线段通常具有这样的特点,线段上的灰度与左右两侧的灰度相比更加突出,因为它的灰度要么比两边都大,要么比两边都小,我们可以将像素点的灰度同时和两边灰度进行对比,判断它是否属于某一条边。

 

2.代码


clear;clc;close all
%%   读取图像
I=imread('1.jpg');
try
    I=rgb2gray(I);    %如果是RGB图像,则转化为灰度图
end

%%    添加噪声
I=imnoise(I,'salt & pepper',0.04);     % 叠加密度为0.04的椒盐噪声
figure
imshow(I)
title('原图')

%%   图像去噪
I=medfilt2(I,[2 4]);   %采用二维中值滤波函数对图像滤波
figure
imshow(I)
title('去噪之后的图像')

%%   图像锐化
[M,N]=size(I);   % 计算图像尺寸
f=double(I);     % 数据类型转换,MATLAB不支持图像的无符号整型的计算
g=fft2(f);       % 二维傅立叶变换,得到频域信息
g=fftshift(g);   % 0频率移到(M/2,N/2)处

n=2;             % 二阶巴特沃斯滤波器
D0=3;            % 巴特沃斯滤波器的D0,D0越大,保留的高频信号就越少(对于不同的图片,可以自行调节,以便得到好的效果)
for i=1:M
    for j=1:N 
        D=sqrt((i-M/2)^2+(j-N/2)^2);   %计算离0频率(M/2,N/2)的距离
        h=1/(1+(D0/D)^(2*n));          %计算传递函数的值
        output(i,j)=h*g(i,j);          %高通滤波之后(i,j)处的值
    end
end
result=ifftshift(output);              %与g=fftshift(g)对应,还原回去
I=ifft2(result);                       %傅里叶反变换
I=uint8(real(I));                      %得到滤波之后的图像(锐化之后的图像)
figure
imshow(I)                               %滤波后图像显示
title('锐化之后的图像')

%%   直方图均衡化处理
I=histeq(I);                             %得到直方图均衡化之后的图像
figure
imshow(I)
title('直方图均衡之后的图像')

%%   边缘检测
I1=edge(I,'prewitt');
I2=edge(I,'roberts');
I3=edge(I,'sobel');

figure
imshow(I1)
title('prewitt边缘检测之后的图像')

figure
imshow(I2)
title('roberts边缘检测之后的图像')

figure
imshow(I3)
title('sobel边缘检测之后的图像')
 

3.运行结果

 

 

 

 

 

 

 


http://www.niftyadmin.cn/n/1005288.html

相关文章

牛客网论坛考研计算机组成原理笔记,GitHub已下载量已过百万

**前言:**看过很多书,但总是忘得很快。知识广度越大越容易接纳新东西,但从考察角度来说,自然是对某个方面了解越深越好。那些大而全的著作虽然每本都是经典中的经典,但实际工作中可能只用到其中的一小部分。我现在越发…

基于matlab使用多类掩码区域的卷积神经网络对人和汽车的各个实例进行分段(附源码)

一、前言 此示例展示了如何使用基于多类掩码区域的卷积神经网络 (R-CNN) 对人和汽车的各个实例进行分段。实例分割是一种计算机视觉技术,您可以在其中检测和定位对象,同时为每个检测到的实例生成分割图。 此示例首先演示如何使用…

io.netty学习(十五)Netty 编解码器

目录 前言 编解码器概述 ByteToMessageCodec 抽象类 MessageToMessageCodec 抽象类 ChannelDuplexHandler 类 CombinedChannelDuplexHandler 类 总结 前言 在前面文章中,我们分别对解码器和编码器进行了讨论。 其实针对编码和解码,Netty 还提供…

基于深度学习的FFDNet图像去噪算法实战准备指南

一、FFDNet图像去噪算法的复现代码下载 1、FFDNet的图像去噪算法的代码分为pytorch版本和matlab版本,下载的链接分别如下: (1)FFDNet-pytorch下载 https://download.csdn.net/download/qq_41104871/87660045 (2)FFDNet-matlab下载 https://download.csdn.net/downlo…

软件工程期末复习-软件设计模式与体系结构-体系结构

目录 软件体系结构概述一、调用-返回风格软件体系结构概念主程序-子程序软件体系结构自顶向下的设计方法的问题结构化设计的优缺点面向对象体系结构面向对象设计的优缺点主程序-子程序与面向对象体系结构相似差异 课程作业 二、数据流风格软件体系结构概念控制流 vs. 数据流数据…

前端设计模式学习

UML类图 1.工厂模式 设计原则:最重要的就是开放封闭原则,对扩展开放,对修改封闭。 1.工厂和类分离,解耦 2.可以扩展多个类 3.工厂的创建逻辑也可以自由扩展 工厂模式可以拆分成三个,分别是工厂方法模式、抽象工厂…

【CesiumJS入门】(6)修改3D Tiles(tileset)的位置及高度

前言 在之前一篇博客中【CesiumJS入门】(4)加载3D Tiles并获取tileset,我们成功得加载了3D Tiles数据集,本篇中,将会向大伙儿介绍tileset位置的修改与恢复: 直接上代码了 /** Date: 2023-06-28 19:35:03*…

python-scapy框架(二)items文件夹的用法讲解

在Scrapy框架中,items文件夹是用来存放定义数据模型的Item类的地方。Item类描述了要从网页中提取的数据的结构和字段。通过使用Item类,我们可以更方便地组织和处理爬取到的数据。下面将详细介绍如何创建Item类,并在Scrapy框架中使用items文件…