【数字图像处理】期末实验,基于直方图均衡化实验, 空间域图像增强, 数字图像傅里叶变化、频域图像处理,基于Hough变换的边缘检测


关注作者了解更多

我的其他CSDN专栏

过程控制系统

工程测试技术

虚拟仪器技术

可编程控制器

工业现场总线

数字图像处理

智能控制

传感器技术

嵌入式系统

复变函数与积分变换

单片机原理

线性代数

大学物理

热工与工程流体力学

数字信号处理

光电融合集成电路技术

电路原理

模拟电子技术

高等数学

概率论与数理统计

数据结构

C语言

模式识别原理

自动控制原理

数字电子技术

关注作者了解更多

资料来源于网络,如有侵权请联系编者

目录

实验一 基于直方图均衡化实验

一、实验目的

二、实验原理

三、实验环境与代码

四、实验过程记录

五、结果与分析

六、自评

实验二 空间域图像增强

一、实验目的

二、实验原理

三、实验环境与代码

四、实验过程记录

五、结果与分析

六、自评

实验三 数字图像傅里叶变化、频域图像处理

一、实验目的 

 二、实验原理

三、实验环境与代码

四、实验过程记录

五、结果与分析

六、自评

实验四 基于Hough变换的边缘检测

一、实验目的

二、实验原理

 三、实验环境与代码

  四、实验过程记录

五、结果与分析

六、自评


实验一 基于直方图均衡化实验

实验二 空间域图像增强

实验三 数字图像傅里叶变化、频域图像处理

实验四基于Hough变换的边缘检测

实验一 基于直方图均衡化实验

一、实验目的

   编程实现下列功能:读出存储的黑白灰度图象并显示,显示灰度直方图,对图象进行直方图均衡化处理,显示处理后图象及直方图,画出灰度变换曲线,并存储处理后图象。

二、实验原理

   直方图均衡化是基于灰度直方图的图像增强的一种方法,均衡化的目的是将原始图像的直方图变为均衡分布的行驶,将一非均匀灰度概率密度分布图像,通过寻求某种灰度变换,变成一幅具有均匀概率密度分布的图像。

三、实验环境与代码

   

close all;clear all;clc 
f = imread('E:\2233\lena.tiff\lena.bmp');	% 从目标路径读入图像
gray_f = im2gray(f);	% 灰度化处理
hgram = ones(1,256);
J = histeq(gray_f);	% 使用直方图均衡增强强度图像的对比度(默认n=64)
T = histeq(gray_f,hgram);	% 直方图规定化
figure,
subplot(131);imshow(uint8(gray_f));title('原始灰度图像');		% 显示灰度原始图像
subplot(132);imshow(uint8(J));title('histeq均衡化结果');		% 显示均衡化后的结果图像
subplot(133);imshow(uint8(T));title('直方图规定化结果');		% 显示规定化均衡后的结果图像
figure,
subplot(131);imhist(gray_f);title('灰度图像直方图');		% 显示原始图像的直方图
subplot(132);imhist(J);title('histeq均衡化直方图');		% 显示均衡化后的直方图
subplot(133);imhist(T);title('规定化均衡后直方图');		% 显示规定化均衡后的直方图
  • 四、实验过程记录

  1. 将待处理图像放到指定文件夹'E:\2233\lena.tiff\lena.bmp');,用imread函数读取
  2. 得到原始图像,和均衡化后的结果

3显示原始灰度直方图,均衡直方图和规定话均衡后直方图 

  • 五、结果与分析

  代码运行正确,有图像得出,正确进行处理,有程序前后的灰度直方图得出,结果正确。

正确进行了图像灰度均衡化处理。

六、自评

通过使用matlab进行灰度直方图的分析,增加了我作为工程师的素养。

实验 空间域图像增强

一、实验目的

  1. 实现绝对均值,高斯加权均值平滑滤波器,中值滤波器
  2. 针对不同噪声模型退化的图像,引入适当的滤波模型去除噪声;
  3. 实现拉普拉斯(二阶微分算子)图像增强;实现Robert,Sobel等一阶微分算子用于图像增强。
  4. 理解Unsharp-Mask增强模型g(x,y)=f(x,y)+a[f(x,y)-fg(x,y)],并用于图像增强;
  5. (思考)利用imnoised(*,’’,value)噪声添加函数,加入不同概率密度的噪声后,评估滤波器的平滑效果。

二、实验原理

  空间滤波在图像处理领域应用广泛,通过把每个像素的值替换为该像素及其领域的函数值来修改图像。空间滤波器可以直接对图像本身进行平滑处理,锐化处理,或滤去相应的噪声。

三、实验环境与代码

1.均值滤波进行平滑处理代码

%使用自带函数

Picture=imread('E:\2233\lena.tiff\lena.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('均值滤波三次后图像');

2.利用sobel算子和拉普拉斯算子进行锐化处理

figure;

Picture2=imread('E:\2233\lena.tiff\lena.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('采用拉普拉斯算子锐化后图像');

3.使用均值滤波器对高斯噪声图像的滤除噪声处理

clc;
clear;
close all;
 
%使用自带函数
Picture=imread('E:\2233\lena.tiff\lena-gaussiannoise.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('均值滤波三次后图像');

四、实验过程记录

1进行均值滤波,对图像进行三次均值滤波,得到平滑处理后的图像

2利用sobel算子和拉普拉斯算子进行锐化处理,得到结果

3使用均值滤波器对高斯噪声图像的滤除噪声处理

五、结果与分析

利用matlab函数进行了图像平滑处理,图像锐化处理,图像滤除噪声,程序能运行,得到了想要的结果,且结果正确。

六、自评

掌握了利用matlab进行空间域图像处理的方法,增加了我作为工程师的素养。

实验 数字图像傅里叶变化、频域图像处理

一、实验目的 

  1. 熟悉傅里叶变换的基本性质,掌握FFT变换的原理和方法。
  2. 利用Matlab编程实现图像的傅里叶变换。分析图像二维频谱的分布特征。
  3. 保存傅里叶变换频谱的实部图像和虚部图像。
  4. 利用傅里叶变换频谱,实现频域的巴特沃斯低通滤波、高斯低通滤波、巴特沃斯高通滤波、高斯高通滤波。分析巴特沃斯低通滤波的阶数、截止半径参数和滤波效果之间的关系。
  5. 实现高频提升(高频加强)滤波。

 二、实验原理

三、实验环境与代码

  1. 图像傅里叶变换
clc;

clear all

I=imread('E:\2233\lena.tiff\lena.bmp');

f=im2gray(I);

figure(4);

subplot(2,2,1),imshow(f);

title('原图');

subplot(2,2,2),

F=fft2(f);

imshow(F);

title('傅里叶变换'); %二维傅里叶变换

FS=fftshift(F);%频率图 %频谱

S=log(1+abs(FS));

subplot(2,2,3);

imshow(S,[]);

title('直接变换频谱图');

fr=real(ifft2(ifftshift(FS)));%频域的图反变

ret=im2uint8(mat2gray(fr));%取其灰度图

subplot(2,2,4),imshow(ret);

title('逆傅里叶变换');

2对图像进行频域低通滤波

close all;  %关闭当前所有图形窗口
clear all;  %清空工作空间变量
clc;        %清屏
I=imread('E:\2233\lena.tiff\lena.bmp');
I=im2gray(I);
I=im2double(I);
[m,n]=size(I);
M=2*m;N=2*n;%滤波器的行数和列数
u=-M/2:(M/2-1);
v=-N/2:(N/2-1);
[U,V]=meshgrid(u,v);%meshgrid(u,v)的作用是分别产生以向量u为行,向量v为裂的两个大小相同的矩阵
D=sqrt(U.^2+V.^2);%设置频率点(U,V)与频域中心的距离为D(U,V)
D0=40;             %截止频率
H=double(D<=D0);    %理想低通滤波器
J=fftshift(fft2(I,size(H,1),size(H,2)));%通过傅里叶变换将时域图像转换到频域图像,并移动到中心位置
K=J.*H;                         %滤波处理
L=ifft2(ifftshift(K));          %傅里叶反转换
L=L(1:m,1:n);                   %设置图像的大小
figure;
subplot(131),imshow(J);
subplot(132),imshow(I);
subplot(133),imshow(L);

3.对图像进行频域高通滤波

close all;  %关闭当前所有图形窗口
clear all;  %清空工作空间变量
clc;        %清屏
I=imread('E:\2233\lena.tiff\lena.bmp');
I=im2gray(I);
I=im2double(I);
[m,n]=size(I);
M=2*m;N=2*n;%滤波器的行数和列数
u=-M/2:(M/2-1);
v=-N/2:(N/2-1);
[U,V]=meshgrid(u,v);%meshgrid(u,v)的作用是分别产生以向量u为行,向量v为裂的两个大小相同的矩阵
D=sqrt(U.^2+V.^2);%设置频率点(U,V)与频域中心的距离为D(U,V)
D0=40;             %截止频率
H=double(D>D0);    %理想高通滤波器
J=fftshift(fft2(I,size(H,1),size(H,2)));%通过傅里叶变换将时域图像转换到频域图像,并移动到中心位置
K=J.*H;                         %滤波处理
L=ifft2(ifftshift(K));          %傅里叶反转换
L=L(1:m,1:n);                   %设置图像的大小
figure;
subplot(131),imshow(J);
subplot(132),imshow(I);
subplot(133),imshow(L);

四、实验过程记录

1进行图像傅里叶变换,得到了傅里叶变换后的图像

2对图像进行频域低通滤波,得到了低通滤波后的图像

3对图像进行了频域高通滤波,得到了滤波后的图像

五、结果与分析

利用matlab进行了图像傅里叶变换,进行了频域低通滤波,频域高通滤波,得到了所需的结果。

六、自评

掌握了频率域图像增强的方法,丰富了我作为工程师的素养

实验四 基于Hough变换的边缘检测

一、实验目的

利用Hough变换检测车牌图像中的矩形车牌区域。

二、实验原理

  1. 霍夫变换(Hough Transform)是数字图像处理中的一种特征提取技术
  2. 常用于判断图像中哪些点共线
  3. 可以检测直线,也可以检测圆或椭圆

 三、实验环境与代码

1.使用Hough变换实现线检测

%%Hougn变换
I=imread('E:\2233\lena.tiff\lienceplate.bmp');
f=im2gray(I);%RGB-->gray
f=f(round(end/2):end,1:round(end/2));
BW=edge(f,'canny');  %edge:以灰度图像为输入,'canny'为边缘检测算子
                     %     输出BW为二值图像,边缘处为白(255)其余部分为黑(0)
imshow(f)
title('原始图像')
[row,col]=size(BW);
rhomax=round((row*row+col*col)^0.5);
A=zeros(2*rhomax,180);   %这里,实际上rho的取值范围为[-rhomax,rhomax],
                         %但是为了后面进行数量统计,转变为[1,2rhomax]
for m=1:row
    for n=1:col
        if BW(m,n)>0 %判断为边缘
            for theta=1:180
                r=theta/180*pi; %角度转换
                rho=round(m*cos(r)+n*sin(r));
                %Hough变换
                rho=rho+rhomax+1;   %坐标平移
                                    %这里的理解,首先matlab中数组是从1开始计数,所以+1;
                                    %数组坐标不能<0,所以 +rhomax
                A(rho,theta)=A(rho,theta)+1;   %数量统计
            end
        end
    end
end
[rho,theta]=find(A>130);   %超过130个点视为共线,rho列号,theta行号
nma=length(rho);
figure,imshow(BW)
for i=1:nma
    hold on
    m=1:row;
    r=theta(i)/180*pi;
    n=(rho(i)-rhomax-m*cos(r))/(0.0001+sin(r));
    plot(n,m,'w-','LineWidth',6);
End
title('hough线检测');

2利用hough变换实现边缘检测

I=imread('E:\2233\lena.tiff\lienceplate.bmp');

Ihsv=rgb2hsv(I);
Iv=Ihsv(:,:,3);                    %提取v空间
Iedge=edge(Iv,'sobel');    %边沿检测

%新建窗口,绘图用
figure (2)
imshow(Iedge);
hold on

%得到霍夫空间
[H1,T1,R1] = hough(Iedge,'Theta',20:0.1:75);
%求极值点
Peaks=houghpeaks(H1,5);
%得到线段信息
lines=houghlines(Iedge,T1,R1,Peaks);
%绘制线段
for k=1:length(lines)
xy=[lines(k).point1;lines(k).point2];   
plot(xy(:,1),xy(:,2),'LineWidth',4);
end

  四、实验过程记录

  1. 利用hough变换进行线检测,得到结果

2利用hough变换实现边缘检测,得到所需结果

五、结果与分析

利用matlab实现了hough的边缘检测和线检测,得到了车牌图像的边缘和轮廓。

六、自评

掌握了利用matlab实现边缘检测和线检测的方法,提高了我作为工程师的素养

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/934059.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

01_Node.js入门 (黑马)

01_Node.js入门 知识点自测 从 index.js 出发&#xff0c;访问到 student/data.json 的相对路径如何写? A&#xff1a;../public/teacher/data.json B&#xff1a;./public/student/data.json C&#xff1a;../student/data.json <details><summary>答案</sum…

React第十七章(useRef)

useRef 当你在React中需要处理DOM元素或需要在组件渲染之间保持持久性数据时&#xff0c;便可以使用useRef。 import { useRef } from react; const refValue useRef(initialValue) refValue.current // 访问ref的值 类似于vue的ref,Vue的ref是.value&#xff0c;其次就是vu…

ThinkPHP知识库文档系统源码

知识库文档系统 一款基于ThinkPHP开发的知识库文档系统&#xff0c;可用于企业工作流程的文档管理&#xff0c;结构化记录沉淀高价值信息&#xff0c;形成完整的知识体系&#xff0c;能够轻松提升知识的流转和传播效率&#xff0c;更好地成就组织和个人。为部门、团队或项目搭…

TIM输入捕获---STM

一、简介 IC输入捕获 输入捕获模式下&#xff0c;当通道输入引脚出现指定电平跳变时&#xff0c;当前CNT的值将被锁存在CCR中&#xff0c;可用于测量PWM波形的频率、占空比、脉冲间隔、电平持续时间等参数 每个高级定时器和通用定时器都拥有4个输入捕获通道 可配置为PWMI模…

Spring Data JPA 入门

文章目录 前言、Spring Data JPA 是什么&#xff1f;1、背景2、优势3、Spring Data JPA 和 MyBatis-Plus 对比4、Spring Data JPA 与 JPA 的关系是什么&#xff1f; 一、准备1、依赖引入Spring Boot 框架依赖引入&#xff1a;非 Spring Boot 框架依赖引入&#xff1a; 2、定义实…

【Nacos03】消息队列与微服务之Nacos 集群部署

集群部署 集群部署说明 因此开源的时候推荐用户把所有服务列表放到一个vip下面&#xff0c;然后挂到一个域名下面 http://ip1:port/openAPI 直连ip模式&#xff0c;机器挂则需要修改ip才可以使用。 http://SLB:port/openAPI 挂载SLB模式(内网SLB&#xff0c;不可暴露到公网…

Python 类的设计(以植物大战僵尸为例)

关于类的设计——以植物大战僵尸为例 一、设计类需满足的三要素1. 类名2. 属性和方法 二、以植物大战僵尸的为例的类的设计1. 尝试分类2. 创建对象调用类的属性和方法*【代码二】*3. 僵尸的继承 三、代码实现 一、设计类需满足的三要素 1. 类名 类名&#xff1a;某类事物的名…

PDF提取文本

1.环境配置 !pip install PyPDF2 pdfplumber PyPDF2 是用来处理 PDF 文件的库&#xff0c;主要功能包括PDF 文件读取、合并、拆分、旋转&#xff0c;可以从 PDF 中提取纯文本&#xff0c;尽管它的提取效果有限&#xff0c;特别是对于扫描版 PDF 文件。 pdfplumber 是比 PyPDF2…

【unity小技巧】分享vscode如何进行unity开发,且如何开启unity断点调试模式,并进行unity断点调试(2024年最新的方法,实测有效)

文章目录 前言一、前置条件1、已安装Visual Studio Code&#xff0c;并且unity首选项>外部工具>外部脚本编辑器选择为Visual Studio Code [版本号]&#xff0c;2、在Visual Studio Code扩展中搜索Unity&#xff0c;并安装3、同时注意这个插件下面的描述&#xff0c;需要根…

Leetcode经典题5--轮转数组

题目描述 给定一个整数数组 nums&#xff0c;将数组中的元素向右轮转 k 个位置&#xff0c;其中 k 是非负数。 输入输出示例 &#xff1a; 输入: nums [1,2,3,4,5,6,7], k 3 输出: [5,6,7,1,2,3,4] 解释: 向右轮转 1 步: [7,1,2,3,4,5,6] 向右轮转 2 步: [6,7,1,2,3,4,5] 向右…

【LeetCode】每日一题 2024_12_9 判断国际象棋棋盘中一个格子的颜色(找规律)

前言 每天和你一起刷 LeetCode 每日一题~ LeetCode 启动&#xff01; 题目&#xff1a;判断国际象棋棋盘中一个格子的颜色 最近力扣一直在出棋盘类的题目&#xff0c;这个月已经出了 9 天了&#xff0c;我倒要看看他是不是真能出一个月 代码与解题思路 先读题&#xff1a;题…

VRRP的知识点总结及实验

1、VRRP VRRP(Virtual Router Redundancy Protocol&#xff0c;虚拟路由器冗余协议)既能够实现网关的备份&#xff0c;又能解决多个网关之间互相冲突的问题&#xff0c;从而提高网络可靠性。 2、VRRP技术概述&#xff1a; 通过把几台路由设备联合组成一台虚拟的“路由设备”…

PostgreSQL 安装部署系列:使用YUM 方式在Centos 7.9 安装指定 PostgreSQL -15版本数据库

一、前言 千里之行始于足下&#xff0c;想学习一门数据库&#xff0c;首先要从安装部署开始&#xff0c;先拥有一套属于自己的学习测试库。为了更好的学习该数据库&#xff0c;可以选择一个在企业界使用率比较普及的操作系统&#xff0c;选择稳定版本的操作系统&#xff1b;如果…

Kafka Stream实战教程

Kafka Stream实战教程 1. Kafka Streams 基础入门 1.1 什么是 Kafka Streams Kafka Streams 是 Kafka 生态中用于 处理实时流数据 的一款轻量级流处理库。它利用 Kafka 作为数据来源和数据输出&#xff0c;可以让开发者轻松地对实时数据进行处理&#xff0c;比如计数、聚合、…

Flink:入门介绍

目录 一、Flink简介 2.1 Flink 架构 2.2 Flink 应用程序 运行模式 二、Flink 集群 部署 2.1 本地集群模式 2.1.1 安装JDK​编辑 2.1.2 下载、解压 Flink 2.1.3 启动集群 2.1.4 停止集群 2.2 Standalone 模式 2.2.0 集群规划 2.2.1 安装JDK 2.2.2 设置免密登录 2…

重生之我在异世界学编程之C语言:深入结构体篇(上)

大家好&#xff0c;这里是小编的博客频道 小编的博客&#xff1a;就爱学编程 很高兴在CSDN这个大家庭与大家相识&#xff0c;希望能在这里与大家共同进步&#xff0c;共同收获更好的自己&#xff01;&#xff01;&#xff01; 本文目录 引言正文《1》 结构体的两种声明一、结构…

移动充电服务如何打破传统的新能源汽车充电难、找桩难问题?

中国新能源汽车在全球市场中占据重要地位&#xff0c;2024年上半年&#xff0c;中国新能源汽车销量达到494.4万辆&#xff0c;占全球新能源市场的68%。新能源汽车作为国家实现“碳中和”的重要途径之一&#xff0c;国家陆续出台各项产业政策&#xff0c;推动新能源汽车行业往标…

AI大模型ollama结合Open-webui

AI大模型Ollama结合Open-webui 作者:行癫(盗版必究) 一:认识 Ollama 1.什么是Ollama ​ Ollama是一个开源的 LLM(大型语言模型)服务工具,用于简化在本地运行大语言模型,降低使用大语言模型的门槛,使得大模型的开发者、研究人员和爱好者能够在本地环境快速实验、管理和…

Ubuntu Linux 图形界面工具管理磁盘分区和文件系统(八)

本文为Ubuntu Linux操作系统- 第八弹~~ 今天接着上文的内容&#xff0c;讲Linux磁盘分区存储的相关知识~ 上期回顾&#xff1a;命令行-管理磁盘分区和文件系统 今天看酷酷的雪獒铠甲&#xff01;&#xff01;雪獒铠甲合体~ 文章目录 磁盘管理器GNOME Disks主要功能安装命令 磁盘…

AI大模型的实践应用-探索智能科技的未来(附学习教程资源)

第一章&#xff1a;AI大模型技术概览 1.1 AI大模型的定义与特点 AI大模型&#xff0c;通常指的是参数数量达到数亿甚至数千亿的深度学习模型。这些模型因其庞大的参数量而得名&#xff0c;能够捕捉和学习数据中的复杂模式和关系。与传统模型相比&#xff0c;AI大模型具有更强的…