Matlab数字图像处理核心项目实践:包含直方图均衡、空间过滤器增强、傅立叶变换与频域滤波、噪...

news2026/4/2 2:51:09
Matlab数字图像处理 包含以下内容 项目 1直方图均衡 项目 2使用空间过滤器增强图像 项目 3频域中的傅立叶变换和滤波 项目 4噪声模型和降噪 项目 5使用逆滤波器和维纳滤波器进行图像恢复 项目 6具有最近邻和双线性插值方法的几何变换 项目7基于离散余弦变换和小波变换的图像压缩 项目 8形态处理 项目 9边缘检测Roberts、Prewitt、Sobel、Marr-Hildreth 和 Canny 边缘检测器和图像分割Otsu 的方法 项目 10图像表示边界跟随和链码和主成分描述翻完旧硬盘里的10个数字图像处理大作业文件夹突然发现当年从只会点PS RGB滑块瞎调滤镜到能用Matlab写各种底层算子的过程挺像开冈萨雷斯同款盲盒——每个算子都是个小咒语试错起来比啃带满彩色插图还夹着折痕公式的厚书爽太多。先从第一个踩坑踩得最浅的“亮瞎眼暗戳戳变清晰”神器直方图均衡说起吧。一开始只会直接调用Matlab现成的histeq(I, 256)后来为了凑大作业的“工作量注水部分”别笑谁大作业没加过一两句自己编的碎碎念注释加个核心简化版手动步骤写了个只算256级灰度图的迷你版% 迷你版旧书扉页亮度修复器仅限无彩图旧照片当年穷买不起高清 I imread(1998年图书馆阿姨签名.jpg); if ndims(I) 3 I rgb2gray(I); end [M,N] size(I); counts imhist(I, 256); % 先数每个灰度有多少像素当年写成sum(Ik)循环过慢死 cdf cumsum(counts) / (M*N); % 攒概率当年冈萨雷斯说这是“累计分布函数的经验估计”完全听不懂就知道是把小的概率往上堆 new_gray uint8(round(cdf * 255)); % 当年纠结死四舍五入还是floorfloor试过签名太淡还是round顺眼 I_eq_min new_gray(I 1); % 像素值从0开始索引从1开始当年卡了半小时bug才发现 subplot(1,2,1); imshow(I); title(暗戳戳只有签名轮廓); subplot(1,2,2); imshow(I_eq_min); title(居然能看清“周三奶茶半价券忘给张同学”);当年对比那个张同学的奶茶券备注时差点叫出声——原来手动调PS根本救不了的东西攒点概率堆一堆就行。当然后来才知道histeq其实还有个小尾巴能控制直方图的形状比如用histeq(I,hgram)匹配目标直方图当年嫌麻烦没加错过了满分。接下来的空间滤波项目解锁了一堆PS滤镜的“真容”原来“高斯模糊”不是随便糊是用一个中间亮四周暗的高斯核卷一卷原来“锐化过度变狗啃”是拉普拉斯算子的阈值没设好原来边缘检测的简单版居然就是用Roberts的两个2x2小核或者Prewitt/Sobel的3x3大核上下左右差一差像素值。当年最开心的是把图书馆阿姨签名的旧照片再锐化一下备注的字体居然能隐约辨认正楷还是行草% 行草还是正楷锐化拉满试试 I_eq histeq(I); % 这次直接用现成的histeq偷懒 sobel_y fspecial(sobel); % 竖边检测核 sobel_x sobel_y; % 横边检测核当年转置这个小技巧省了好多打字 I_sobel_x imfilter(I_eq, sobel_x, replicate); % 边缘补全选replicate当年试symmetric/circular选circular签名居然和照片边缘连起来了像个蜘蛛网 I_sobel_y imfilter(I_eq, sobel_y, replicate); I_sobel sqrt(double(I_sobel_x).^2 double(I_sobel_y).^2); % 算梯度模长当年直接abs相加过模长还是更清晰一点 I_sobel uint8(255 * mat2gray(I_sobel)); % 归一化到0-255当年忘归一化显示出来全是黑的以为算子坏了 subplot(1,3,1); imshow(I_eq); title(均衡后); subplot(1,3,2); imshow(I_sobel); title(模长锐化后备注正楷);当年老师批作业的时候在备注正楷旁边画了个笑脸说“观察得很仔细下次记得给拉普拉斯也设个阈值试试不然狗啃得厉害”。说到阈值后面的Otsu分割就是自动找这个“最佳狗啃阈值”的神器当年第一次用Otsu的时候简直惊为天人原来不用手动调imtool的滑动条Matlab自动算出来的阈值就能把旧照片的签名从背景里抠出来。抠出来的签名还能用后面学的形态处理腐蚀膨胀开运算闭运算修一修毛边比如先开运算先腐蚀后膨胀去掉小毛点再闭运算先膨胀后腐蚀连起来断掉的笔画% 自动抠签名修毛边一条龙 level graythresh(I_eq); % Otsu算阈值当年写成level0.5二分过签名连背景糊成一团 I_binary imbinarize(I_eq, level); se strel(disk, 2); % 选半径2的圆盘形结构元素当年选正方形修毛边修得太狠备注的“三”变成了“一” I_open imopen(I_binary, se); I_close imclose(I_open, se); % 一条龙完成 subplot(1,3,1); imshow(I_binary); title(Otsu自动二分有小毛点和断笔画); subplot(1,3,2); imshow(I_open); title(开运算后毛点没了但断笔画更明显); subplot(1,3,3); imshow(I_close); title(闭运算后毛点没了断笔画连了);抠出来的签名还能用后面学的边界跟随和链码存成一串数字当年存成了一个txt文件发给同学炫耀同学说“一串数字看不懂但知道你这作业做了挺多东西”。Matlab数字图像处理 包含以下内容 项目 1直方图均衡 项目 2使用空间过滤器增强图像 项目 3频域中的傅立叶变换和滤波 项目 4噪声模型和降噪 项目 5使用逆滤波器和维纳滤波器进行图像恢复 项目 6具有最近邻和双线性插值方法的几何变换 项目7基于离散余弦变换和小波变换的图像压缩 项目 8形态处理 项目 9边缘检测Roberts、Prewitt、Sobel、Marr-Hildreth 和 Canny 边缘检测器和图像分割Otsu 的方法 项目 10图像表示边界跟随和链码和主成分描述炫耀完边界链码接下来就是傅里叶变换和频域滤波的“玄学项目”了当年第一次算fft2的时候直接imshow出来全是黑的后来才知道要fftshift把直流分量移到中间还要用log(1abs(F))压缩动态范围% 玄学傅里叶把模糊旧照片变不模糊试试其实先加了个运动模糊 I rgb2gray(imread(张同学大头贴.jpg)); PSF fspecial(motion, 20, 45); % 加个45度20像素的运动模糊当年大头贴手抖拍的就是这个效果 I_blur imfilter(I, PSF, conv, circular); % 选circular卷积避免边缘黑边虽然频域本来就是circular的 F_blur fft2(I_blur); F_blur_shift fftshift(F_blur); S_blur log(1 abs(F_blur_shift)); % 压缩动态范围当年直接imshow abs(F_blur_shift)只有中间一个亮点 subplot(1,2,1); imshow(I_blur); title(45度手抖模糊大头贴); subplot(1,2,2); imshow(S_blur, []); title(傅里叶频谱中间亮四周有45度的模糊条纹);当年看到四周的45度模糊条纹时终于相信傅里叶变换不是玄学了——原来空间域的模糊在频域就是特定方向的条纹。接下来用逆滤波和维纳滤波恢复逆滤波当年没加噪声还好一加高斯椒盐混合噪声直接变成雪花屏维纳滤波就稳多了能自动平衡逆滤波的噪声放大和模糊去除% 雪花屏还是清晰大头贴维纳滤波选后者 I_noise_blur imnoise(I_blur, gaussian, 0, 0.001) imnoise(I_blur, salt pepper, 0.02); % 加混合噪声当年只加高斯维纳滤波和逆滤波差别不大 % 逆滤波不加噪声专用加了就死 F_inv F_blur_shift ./ fftshift(fft2(PSF, M, N)); I_inv real(ifft2(ifftshift(F_inv))); % 维纳滤波加了也不怕 K 0.01; % 信噪比倒数的估计当年调了好久KK0.01刚好 F_wiener F_blur_shift .* conj(fftshift(fft2(PSF, M, N))) ./ (abs(fftshift(fft2(PSF, M, N))).^2 K); I_wiener real(ifft2(ifftshift(F_wiener))); subplot(1,3,1); imshow(I_noise_blur, []); title(混合噪声模糊大头贴); subplot(1,3,2); imshow(I_inv, []); title(逆滤波雪花屏张同学变成马赛克); subplot(1,3,3); imshow(I_wiener, []); title(维纳滤波张同学又回来了);当年老师批作业的时候在K0.01旁边画了个星星说“信噪比倒数估计得很准下次记得用Matlab现成的deconvwnr函数里面有自动估K的选项”。说到现成的函数后面的几何变换最近邻和双线性插值Matlab也有imresize和imrotate但当年为了凑大作业又写了个迷你版的图像放大2倍% 迷你版2倍放大器最近邻狗啃vs双线性顺滑 I imread(签名.jpg); [M,N] size(I); M_new 2*M; N_new 2*N; % 最近邻插值 I_nearest uint8(zeros(M_new, N_new)); for i 1:M_new for j 1:N_new x round(i/2); y round(j/2); if x 1; x 1; end; if x M; x M; end; % 边界补全 if y 1; y 1; end; if y N; y N; end; I_nearest(i,j) I(x,y); end end % 双线性插值写得很丑当年凑数的核心就是取周围四个像素加权平均 I_bilinear uint8(zeros(M_new, N_new)); for i 1:M_new for j 1:N_new x (i-0.5)/2; % 坐标转换当年卡了好久原来最近邻用的是i/2双线性用的是(i-0.5)/2更合理 y (j-0.5)/2; x1 floor(x); x2 x1 1; y1 floor(y); y2 y1 1; if x1 1; x1 1; end; if x2 M; x2 M; end; if y1 1; y1 1; end; if y2 N; y2 N; end; dx x - x1; dy y - y1; I_bilinear(i,j) (1-dx)*(1-dy)*double(I(x1,y1)) dx*(1-dy)*double(I(x2,y1)) (1-dx)*dy*double(I(x1,y2)) dx*dy*double(I(x2,y2)); end end subplot(1,3,1); imshow(I); title(原图签名); subplot(1,3,2); imshow(I_nearest); title(最近邻2倍狗啃签名); subplot(1,3,3); imshow(I_bilinear); title(双线性2倍顺滑签名);当年写双线性插值的循环写了好久运行起来也慢死当年的电脑还是酷睿i3后来才知道用Matlab的矩阵运算代替循环会快很多但当年凑数凑够了就行。最后剩下的就是图像压缩DCT和小波变换和边缘检测的进阶版Marr-Hildreth和Canny还有主成分描述了。图像压缩当年做的是把张同学的大头贴用DCT压缩去掉高频分量也就是细节只保留低频分量也就是轮廓和颜色压缩比居然能达到10:1还能看清张同学的脸% 迷你版DCT压缩器10:1压缩比试试 I rgb2gray(imread(张同学大头贴.jpg)); I im2double(I); T dctmtx(8); % 8x8 DCT变换矩阵 DCT_block (block) T * block.data * T; % 块DCT变换 IDCT_block (block) T * block.data * T; % 块IDCT变换 I_dct blockproc(I, [8 8], DCT_block); % 只保留左上角1/10的低频分量大概前3x3的块不对前1x1不当年保留的是每个8x8块的前k行前k列k3压缩比大概(3*3)/(8*8)14.2%接近10:1 mask zeros(8,8); mask(1:3,1:3) 1; Mask_block (block) block.data .* mask; I_dct_mask blockproc(I_dct, [8 8], Mask_block); I_idct blockproc(I_dct_mask, [8 8], IDCT_block); I_idct im2uint8(I_idct); subplot(1,2,1); imshow(I); title(原图大头贴); subplot(1,2,2); imshow(I_idct); title(10:1左右DCT压缩后能看清脸细节丢了一点);当年老师批作业的时候说“压缩比算得不对要把量化和熵编码也算进去但凑数凑够了及格没问题”。哦对了当年还差点忘了主成分描述主成分描述当年做的是把100张图书馆的旧照片的灰度图排成一个矩阵然后用PCA降维只保留前10个主成分居然能重建出大概的旧照片轮廓当年觉得太神奇了但代码太长就不放了。总的来说这10个数字图像处理大作业虽然当年凑数凑了很多踩坑踩了很多但现在回头看每个坑都是一个学习的机会每个凑数的代码都是一个加深理解的过程。当年只会点PS RGB滑块瞎调滤镜现在知道了每个滤镜背后的数学原理和Matlab小咒语这大概就是数字图像处理这门课的魅力所在吧。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

SpringBoot-17-MyBatis动态SQL标签之常用标签

文章目录 1 代码1.1 实体User.java1.2 接口UserMapper.java1.3 映射UserMapper.xml1.3.1 标签if1.3.2 标签if和where1.3.3 标签choose和when和otherwise1.4 UserController.java2 常用动态SQL标签2.1 标签set2.1.1 UserMapper.java2.1.2 UserMapper.xml2.1.3 UserController.ja…

wordpress后台更新后 前端没变化的解决方法

使用siteground主机的wordpress网站,会出现更新了网站内容和修改了php模板文件、js文件、css文件、图片文件后,网站没有变化的情况。 不熟悉siteground主机的新手,遇到这个问题,就很抓狂,明明是哪都没操作错误&#x…

网络编程(Modbus进阶)

思维导图 Modbus RTU(先学一点理论) 概念 Modbus RTU 是工业自动化领域 最广泛应用的串行通信协议,由 Modicon 公司(现施耐德电气)于 1979 年推出。它以 高效率、强健性、易实现的特点成为工业控制系统的通信标准。 包…

UE5 学习系列(二)用户操作界面及介绍

这篇博客是 UE5 学习系列博客的第二篇,在第一篇的基础上展开这篇内容。博客参考的 B 站视频资料和第一篇的链接如下: 【Note】:如果你已经完成安装等操作,可以只执行第一篇博客中 2. 新建一个空白游戏项目 章节操作,重…

IDEA运行Tomcat出现乱码问题解决汇总

最近正值期末周,有很多同学在写期末Java web作业时,运行tomcat出现乱码问题,经过多次解决与研究,我做了如下整理: 原因: IDEA本身编码与tomcat的编码与Windows编码不同导致,Windows 系统控制台…

利用最小二乘法找圆心和半径

#include <iostream> #include <vector> #include <cmath> #include <Eigen/Dense> // 需安装Eigen库用于矩阵运算 // 定义点结构 struct Point { double x, y; Point(double x_, double y_) : x(x_), y(y_) {} }; // 最小二乘法求圆心和半径 …

使用docker在3台服务器上搭建基于redis 6.x的一主两从三台均是哨兵模式

一、环境及版本说明 如果服务器已经安装了docker,则忽略此步骤,如果没有安装,则可以按照一下方式安装: 1. 在线安装(有互联网环境): 请看我这篇文章 传送阵>> 点我查看 2. 离线安装(内网环境):请看我这篇文章 传送阵>> 点我查看 说明&#xff1a;假设每台服务器已…

XML Group端口详解

在XML数据映射过程中&#xff0c;经常需要对数据进行分组聚合操作。例如&#xff0c;当处理包含多个物料明细的XML文件时&#xff0c;可能需要将相同物料号的明细归为一组&#xff0c;或对相同物料号的数量进行求和计算。传统实现方式通常需要编写脚本代码&#xff0c;增加了开…

LBE-LEX系列工业语音播放器|预警播报器|喇叭蜂鸣器的上位机配置操作说明

LBE-LEX系列工业语音播放器|预警播报器|喇叭蜂鸣器专为工业环境精心打造&#xff0c;完美适配AGV和无人叉车。同时&#xff0c;集成以太网与语音合成技术&#xff0c;为各类高级系统&#xff08;如MES、调度系统、库位管理、立库等&#xff09;提供高效便捷的语音交互体验。 L…

(LeetCode 每日一题) 3442. 奇偶频次间的最大差值 I (哈希、字符串)

题目&#xff1a;3442. 奇偶频次间的最大差值 I 思路 &#xff1a;哈希&#xff0c;时间复杂度0(n)。 用哈希表来记录每个字符串中字符的分布情况&#xff0c;哈希表这里用数组即可实现。 C版本&#xff1a; class Solution { public:int maxDifference(string s) {int a[26]…

【大模型RAG】拍照搜题技术架构速览:三层管道、两级检索、兜底大模型

摘要 拍照搜题系统采用“三层管道&#xff08;多模态 OCR → 语义检索 → 答案渲染&#xff09;、两级检索&#xff08;倒排 BM25 向量 HNSW&#xff09;并以大语言模型兜底”的整体框架&#xff1a; 多模态 OCR 层 将题目图片经过超分、去噪、倾斜校正后&#xff0c;分别用…

【Axure高保真原型】引导弹窗

今天和大家中分享引导弹窗的原型模板&#xff0c;载入页面后&#xff0c;会显示引导弹窗&#xff0c;适用于引导用户使用页面&#xff0c;点击完成后&#xff0c;会显示下一个引导弹窗&#xff0c;直至最后一个引导弹窗完成后进入首页。具体效果可以点击下方视频观看或打开下方…

接口测试中缓存处理策略

在接口测试中&#xff0c;缓存处理策略是一个关键环节&#xff0c;直接影响测试结果的准确性和可靠性。合理的缓存处理策略能够确保测试环境的一致性&#xff0c;避免因缓存数据导致的测试偏差。以下是接口测试中常见的缓存处理策略及其详细说明&#xff1a; 一、缓存处理的核…

龙虎榜——20250610

上证指数放量收阴线&#xff0c;个股多数下跌&#xff0c;盘中受消息影响大幅波动。 深证指数放量收阴线形成顶分型&#xff0c;指数短线有调整的需求&#xff0c;大概需要一两天。 2025年6月10日龙虎榜行业方向分析 1. 金融科技 代表标的&#xff1a;御银股份、雄帝科技 驱动…

观成科技:隐蔽隧道工具Ligolo-ng加密流量分析

1.工具介绍 Ligolo-ng是一款由go编写的高效隧道工具&#xff0c;该工具基于TUN接口实现其功能&#xff0c;利用反向TCP/TLS连接建立一条隐蔽的通信信道&#xff0c;支持使用Let’s Encrypt自动生成证书。Ligolo-ng的通信隐蔽性体现在其支持多种连接方式&#xff0c;适应复杂网…

铭豹扩展坞 USB转网口 突然无法识别解决方法

当 USB 转网口扩展坞在一台笔记本上无法识别,但在其他电脑上正常工作时,问题通常出在笔记本自身或其与扩展坞的兼容性上。以下是系统化的定位思路和排查步骤,帮助你快速找到故障原因: 背景: 一个M-pard(铭豹)扩展坞的网卡突然无法识别了,扩展出来的三个USB接口正常。…

未来机器人的大脑:如何用神经网络模拟器实现更智能的决策?

编辑&#xff1a;陈萍萍的公主一点人工一点智能 未来机器人的大脑&#xff1a;如何用神经网络模拟器实现更智能的决策&#xff1f;RWM通过双自回归机制有效解决了复合误差、部分可观测性和随机动力学等关键挑战&#xff0c;在不依赖领域特定归纳偏见的条件下实现了卓越的预测准…

Linux应用开发之网络套接字编程(实例篇)

服务端与客户端单连接 服务端代码 #include <sys/socket.h> #include <sys/types.h> #include <netinet/in.h> #include <stdio.h> #include <stdlib.h> #include <string.h> #include <arpa/inet.h> #include <pthread.h> …

华为云AI开发平台ModelArts

华为云ModelArts&#xff1a;重塑AI开发流程的“智能引擎”与“创新加速器”&#xff01; 在人工智能浪潮席卷全球的2025年&#xff0c;企业拥抱AI的意愿空前高涨&#xff0c;但技术门槛高、流程复杂、资源投入巨大的现实&#xff0c;却让许多创新构想止步于实验室。数据科学家…

深度学习在微纳光子学中的应用

深度学习在微纳光子学中的主要应用方向 深度学习与微纳光子学的结合主要集中在以下几个方向&#xff1a; 逆向设计 通过神经网络快速预测微纳结构的光学响应&#xff0c;替代传统耗时的数值模拟方法。例如设计超表面、光子晶体等结构。 特征提取与优化 从复杂的光学数据中自…