数字图像处理-基于matlab-直方图均匀化,傅立叶变换,图像平滑,图像锐化
直方图均匀化
任务:用MATLAB或VC或Delphi等实现图像直方图均匀化的算法。
clc;clear;close all; % 清除工作台 %
path(path,'..\pics'); % 设置路径 %
im=imread('AT3_1m4_01.tif'); % 读取图像 %
figure(1);imshow(im); % 显示图像 原始图像 %

imD=double(im); % 转为double类型 %
figure(3); % 准备画板 %
[M,N]=size(im); % 得到图像长宽信息 %
[counts,center]=imhist(im,32); % 将直方图均分为32个等级,默认为256个等级 %
counts=counts/(M*N); % 归一化 %
stem(center,counts); % 画图 图像像素分析 %

figure(4); % 准备画板 %
x=0:255; % 生成0~255的向量 %
hist(im(:),x); % 画直方图 像素分布 %

I=histeq(im); % 直方图均衡化 %
figure(5);imshow(I); % 显示图像 图像均衡化效果 %

figure(6); % 准备画板 %
hist(I(:),x); % 画直方图 均衡化的像素分布 %

傅立叶变换
任务:掌握傅立叶变换的基本原理和实现算法。
clc;clear;close all; % 清除工作台 %
path(path,'..\pics'); % 设置路径 %
I=imread('greens.jpg'); % 读取图像 %
figure(1);imshow(I); % 显示图像 原始图像 %

sI=rgb2gray(I); % 转换为灰度图 %
I=im2double(I); % 转为double类型 %
figure(2);imshow(I,[0,1]); % 显示图像 灰度化的图像 %

F=fft2(I); % 傅里叶变换 %
Fm=abs(F); % 取绝对值 %
T=log(Fm+1); % 取log %
figure(3);imshow(T,[]); % 显示图像 快速傅里叶变化后的图像 %

Ff=fftshift(F); %对傅里叶变换后的图像进行象限转换
Fm=abs(Ff); % 取绝对值 %
T=log(Fm+1); % 取log %
figure(4);imshow(T,[]); % 显示图像 象限转换 %

J=ifft2(F); % 快速傅里叶逆变换 %
figure(5);imshow(J,[0,1]); % 显示图像 快速傅里叶逆变化的图像 %

讨论不同的图像内容与频谱之间的对应关系.
因为频谱图表示图像梯度的分布图,所以原图和频率图上的点不是一一对应的,频谱图上的点表示空域图某点的灰度梯度大小,梯度大其频率高,暗的点数多,就是说其原图像素梯度较小,频率低,图像就较柔和。
图像平滑
任务:掌握图像平滑算法的基本原理。
clc;clear;close all; % 清除工作台 %
path(path,'..\pics'); % 设置路径 %
im=imread('pout.tif'); % 读取图像 %
im=double(im); % 转换为double类型 %
im=im/max(im(:)); % 归一化 %
figure(1);imshow(im,[0,1]);title('ground truth'); % 显示图像 原始图像 %

P1 = imnoise(im,'gaussian',0,0.005); % 添加高斯噪声
figure(2);imshow(P1,[0,1]); title('gaussian noise'); % 显示噪声图像 添加高斯噪声 %

P2 = imnoise(im,'salt & pepper',0.02); % 添加椒盐噪声
figure(3);imshow(P2,[0,1]); title('salt& pepper noise'); % 显示噪声图像 添加椒盐噪声 %

a=[1 1 1;1 1 1;1 1 1]; % 建立3x3的全1的矩阵 %
template1=(1/9)*a; % 模板 %
imAve=conv2(double(P1),double(template1)); % 卷积 %
figure(4);imshow(imAve,[0,1]); title('average filter'); % 显示图像 均值滤波 %

imMed=medfilt2(P1,[3,3],'symmetric'); % 中值滤波 %
figure(5);imshow(imMed,[0,1]);title('median filter'); % 显示图像 中值滤波 %

psf=fspecial('gaussian',3,1); % 生成高斯滤波器(也叫算子) %
imGau=imfilter(P1,psf,'conv','symmetric'); % 应用滤波 %
figure(6);imshow(imGau,[0,1]); title('gaussian filter'); % 显示图像 高斯滤波 %

图像锐化
任务: 掌握图像锐化算法的基本原理。
罗伯特算子(Roberts)实现
function [edge]= RobertsOperator(pic)
edge = zeros(size(pic));
h = size(pic, 1);
w = size(pic, 2);
for i = 1 : h - 1
for j = 1 : w - 1
edge(i, j) =abs(pic(i, j) - pic(i + 1, j + 1)) + abs(pic(i, j + 1) - pic(i + 1, j));
end
end
end
索贝尔算子(Sobel)实现
function [edge] = SobelOperator(pic)
edge = zeros(size(pic));
h = size(pic, 1);
w = size(pic, 2);
gx = [-1, -2, -1; 0, 0, 0; 1, 2, 1];
gy = gx';
for i = 2 : h - 1
for j = 2 : w - 1
sub = double(pic(i - 1 : i + 1, j - 1 : j + 1));
g1 = abs(sum(sum(sub .* gx)));
g2 = abs(sum(sum(sub .* gy)));
if g1 > g2
edge(i, j) = g1;
else
edge(i, j) = g2;
end
end
end
end
普瑞维特算子(Prewitt)实现
function [edge] = PrewittOperator(pic)
edge = zeros(size(pic));
h = size(pic, 1);
w = size(pic, 2);
gx = [-1, -1, -1; 0, 0, 0; 1, 1, 1];
gy = gx';
for i = 2 : h - 1
for j = 2 : w - 1
sub = double(pic(i - 1 : i + 1, j - 1 : j + 1));
g1 = abs(sum(sum(sub .* gx)));
g2 = abs(sum(sum(sub .* gy)));
if g1 > g2
edge(i, j) = g1;
else
edge(i, j) = g2;
end
end
end
end
二阶梯度算子(拉普拉斯算子-Laplace)实现
function [edge] = LaplaceOperator(pic)
edge =zeros(size(pic));
h = size(pic, 1);
w = size(pic, 2);
l = [0, 1, 0; 1, -4, 1; 0, 1, 0];
for i = 2 : h - 1
for j = 2 : w - 1
sub = double(pic(i - 1 : i + 1, j - 1 : j + 1));
d = sum(sum(sub .*l));
edge(i, j) =d;
end
end
end
实验
clc;clear;close all; % 清除工作台 %
path(path,'..\pics'); % 设置路径 %
im=imread('pout.tif'); % 读取图像 %
im=double(im); % 转换为double类型 %
im=im/max(im(:)); % 归一化 %
figure(1);imshow(im,[0,1]);title('ground truth'); % 显示图像 原始图像 %

result=RobertsOperator(im); % Roberts边缘检测 %
result=result/max(result(:)); % 归一化 %
figure(2);imshow(result,[0,1]);title('Roberts'); % 显示检测图像 Roberts算子 %

result=SobelOperator(im); % Sobel边缘检测 %
result=result/max(result(:)); % 归一化 %
figure(3);imshow(result,[0,1]);title('Sobel'); % 显示检测图像 Sobel边缘检测 %

result=PrewittOperator(im); % Prewitt边缘检测 %
result=result/max(result(:)); % 归一化 %
figure(4);imshow(result,[0,1]);title('Prewitt'); % 显示边缘检测结果 Prewitt边缘检测 %

result=LaplaceOperator(im); % Laplace边缘检测 %
result=result/max(result(:)); % 归一化 %
figure(5);imshow(result,[0,1]);title('Laplace'); % 显示边缘检测结果 Laplace边缘检测结果 %

简单实现梯度计算
function [Px,Py] = my_gradient(im)
[h, w] = size(im);
Px = zeros(h, w);
Py = zeros(h, w);
for i=2:h-1
for j=2:w-1
Px(i, j) = abs(im(i + 1, j)-im(i - 1, j));
Py(i, j) = abs(im(i, j + 1)-im(i, j - 1));
end
end
数字图像处理-基于matlab-直方图均匀化,傅立叶变换,图像平滑,图像锐化的更多相关文章
- 基于小波变换的数字图像处理(MATLAB源代码)
基于小波变换的数字图像处理(MATLAB源代码) clear all; close all; clc;M=256;%原图像长度N=64; %水印长度[filename1,pathname]=uiget ...
- 为什么要进行傅立叶变换?傅立叶变换究竟有何意义?如何用Matlab实现快速傅立叶变换
写在最前面:本文是我阅读了多篇相关文章后对它们进行分析重组整合而得,绝大部分内容非我所原创.在此向多位原创作者致敬!!!一.傅立叶变换的由来关于傅立叶变换,无论是书本还是在网上可以很容易找到关于傅立叶 ...
- Win8Metro(C#)数字图像处理--2.30直方图均衡化
原文:Win8Metro(C#)数字图像处理--2.30直方图均衡化 [函数名称] 直方图均衡化函数HistogramEqualProcess(WriteableBitmap src) [算法说明] ...
- 《数字图像处理(MATLAB)》冈萨雷斯
<数字图像处理(MATLAB)>冈萨雷斯 未完结! 参考:数字图像处理——https://blog.csdn.net/dujing2019/article/category/8820151 ...
- 数字图像处理的Matlab实现(4)—灰度变换与空间滤波
第3章 灰度变换与空间滤波(2) 3.3 直方图处理与函数绘图 基于从图像亮度直方图中提取的信息的亮度变换函数,在诸如增强.压缩.分割.描述等方面的图像处理中扮演着基础性的角色.本节的重点在于获取.绘 ...
- 数字图像处理的Matlab实现(1)—绪论
第1章 绪论 1.1 什么是数字图像处理 一幅图像可以定义为一个二维函数\(f(x,y)\),这里的\(x\)和\(y\)是空间坐标,而在任意坐标\((x,y)\)处的幅度\(f\)被称为这一坐标位置 ...
- Win8Metro(C#)数字图像处理--2.34直方图规定化
原文:Win8Metro(C#)数字图像处理--2.34直方图规定化 [函数名称] WriteableBitmap HistogramSpecificateProcess(WriteableBi ...
- 数字图像处理的Matlab实现(2)—MATLAB基础
第2章 MATLAB编程基础 2.1 M-文件 MATLAB中的M-文件可以是简单执行一系列MATLAB语句的源文件,也可以是接收自变量并产生一个或多个输出的函数. M-文件由文本编辑器创建,并以fi ...
- 数字图像处理的Matlab实现(3)—灰度变换与空间滤波
第3章 灰度变换与空间滤波(1) 3.1 简介 空间域指的是图像平面本身,这类方法是以对图像像素直接处理为基础的.本章主要讨论两种空间域处理方法:亮度(灰度)变换与空间滤波.后一种方法有时涉及到邻域处 ...
随机推荐
- LC-283
题目链接:https://leetcode-cn.com/problems/move-zeroes/ 首先想到了快排(简易思想),0为中间点, 把不等于0(注意题目没说不能有负数)的放到中间点的左边, ...
- centos7源码安装mysql5.7.19
centos7源码包安装mysql5.7 5.7.20安装方法和5.7.19的一样. 1.安装前准备 清空环境.安装相应的软件包 1>关闭防火墙和SELinux 2>配置yum源(阿里云, ...
- 还原lvm逻辑卷创建整个过程
很多情况入职的时候,系统可能已规划过的,但是有的信息也不是很完整,比如下面的lvm逻辑卷我们先不管对与错,利用一些工具来了解当前lvm逻辑卷的情况 系统采样: [root@fp-web-112 var ...
- 编译实战 | 手摸手教你在Windows环境下运行Redis6.x
原创:微信公众号 码农参上,欢迎分享,转载请保留出处. 哈喽大家好啊,我是没事就愿意瞎捣鼓的Hydra. 不知道有没有小伙伴像我一样,平常开发中用的是windows操作系统,有时候想装点什么软件,一看 ...
- 论文翻译:2018_LSTM剪枝_Learning intrinsic sparse structures within long short-term memory
论文地址:在长短时记忆中学习内在的稀疏结构 论文代码:https://github.com/wenwei202/iss-rnns 引用格式:Wen W, He Y, Rajbhandari S, et ...
- VisualStudio安装步骤
1.下载vs2017,点击安装 2.选择asp.net选项进行安装,如果需要其他的功能,可以选上 3.更改安装路径,尽量把文件安装在c盘以外的盘上,因为c盘是系统盘,安装的东西越多电脑会越卡.注意:不 ...
- Windows 下 MSYS2 环境配置和 MinGW-w64 C++ 环境配置
Windows 下 MSYS2 环境配置和 MinGW-w64 C++ 环境配置 1.简介 本文主要是 Windows 下 MSYS2 环境配置和 MinGW-w64 C++编译环境配置方法 2.下载 ...
- Azure Terraform(十一)Azure DevOps Pipeline 内的动态临时变量的使用
思路浅析 在我们分析的 Azure Terraform 系列文中有介绍到关于 Terraform 的状态文件远程存储的问题,我们在 Azure DevOps Pipeline 的 Task Job ...
- pandas子集选取的三种方法:[]、.loc[]、.iloc[]
pandas读取Excel.csv文件中的数据时,得到的大多是表格型的二维数据,在pandas中对应的即为DataFrame数据结构.在处理这类数据时,往往要根据据需求先获取数据中的子集,如某些列.某 ...
- js项目案例
2021.04.12 --mouseover抖动情况之一