直方图均匀化

任务:用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-直方图均匀化,傅立叶变换,图像平滑,图像锐化的更多相关文章

  1. 基于小波变换的数字图像处理(MATLAB源代码)

    基于小波变换的数字图像处理(MATLAB源代码) clear all; close all; clc;M=256;%原图像长度N=64; %水印长度[filename1,pathname]=uiget ...

  2. 为什么要进行傅立叶变换?傅立叶变换究竟有何意义?如何用Matlab实现快速傅立叶变换

    写在最前面:本文是我阅读了多篇相关文章后对它们进行分析重组整合而得,绝大部分内容非我所原创.在此向多位原创作者致敬!!!一.傅立叶变换的由来关于傅立叶变换,无论是书本还是在网上可以很容易找到关于傅立叶 ...

  3. Win8Metro(C#)数字图像处理--2.30直方图均衡化

    原文:Win8Metro(C#)数字图像处理--2.30直方图均衡化 [函数名称] 直方图均衡化函数HistogramEqualProcess(WriteableBitmap src) [算法说明] ...

  4. 《数字图像处理(MATLAB)》冈萨雷斯

    <数字图像处理(MATLAB)>冈萨雷斯 未完结! 参考:数字图像处理——https://blog.csdn.net/dujing2019/article/category/8820151 ...

  5. 数字图像处理的Matlab实现(4)—灰度变换与空间滤波

    第3章 灰度变换与空间滤波(2) 3.3 直方图处理与函数绘图 基于从图像亮度直方图中提取的信息的亮度变换函数,在诸如增强.压缩.分割.描述等方面的图像处理中扮演着基础性的角色.本节的重点在于获取.绘 ...

  6. 数字图像处理的Matlab实现(1)—绪论

    第1章 绪论 1.1 什么是数字图像处理 一幅图像可以定义为一个二维函数\(f(x,y)\),这里的\(x\)和\(y\)是空间坐标,而在任意坐标\((x,y)\)处的幅度\(f\)被称为这一坐标位置 ...

  7. Win8Metro(C#)数字图像处理--2.34直方图规定化

    原文:Win8Metro(C#)数字图像处理--2.34直方图规定化  [函数名称] WriteableBitmap HistogramSpecificateProcess(WriteableBi ...

  8. 数字图像处理的Matlab实现(2)—MATLAB基础

    第2章 MATLAB编程基础 2.1 M-文件 MATLAB中的M-文件可以是简单执行一系列MATLAB语句的源文件,也可以是接收自变量并产生一个或多个输出的函数. M-文件由文本编辑器创建,并以fi ...

  9. 数字图像处理的Matlab实现(3)—灰度变换与空间滤波

    第3章 灰度变换与空间滤波(1) 3.1 简介 空间域指的是图像平面本身,这类方法是以对图像像素直接处理为基础的.本章主要讨论两种空间域处理方法:亮度(灰度)变换与空间滤波.后一种方法有时涉及到邻域处 ...

随机推荐

  1. vim 下几种比较省劲的方式(vi结合着用)

    Vim的几种模式 正常模式:可以使用快捷键命令,或按:输入命令行. 插入模式:可以输入文本,在正常模式下,按i.a.o等都可以进入插入模式. 可视模式:正常模式下按v可以进入可视模式, 在可视模式下, ...

  2. 『忘了再学』Shell基础 — 10、Bash中的特殊符号(二)

    提示:本篇文章接上一篇文章,主要说说()小括号和{}大括号的区别与使用. 8.()小括号 ():用于一串命令执行时,()中的命令会在子Shell中运行.(和下面大括号一起说明) 9.{}大括号 {}: ...

  3. 学习打卡——docker部署

    1. 部署mysql 拉取对应版本的mysql,不加版本号默认当前最新版 docker pull mysql:8.0.26 创建目录,可以换成你自己想把它存放的目录,后续同理 mkdir ~/mysq ...

  4. Hyperledger Fabric无排序组织以Raft协议启动多个Orderer服务、TLS组织运行维护Orderer服务

    前言 在实验Hyperledger Fabric无排序组织以Raft协议启动多个Orderer服务.多组织共同运行维护Orderer服务中,我们已经完成了让普通组织运行维护 Orderer 服务,但是 ...

  5. Educational Codeforces Round 121 (Rated for Div. 2)——B - Minor Reduction

    B - Minor Reduction 题源:https://codeforces.com/contest/1626/problem/B 题意 给定一个超级大的整数 x ,可以对任意相邻两位数进行操作 ...

  6. js常用框架原理

    (function(){         //存储已经创建的模块     var moduleMap = {};     //判断是否已经加载过     var fileMap   = {};     ...

  7. python基础练习题(题目 统计 1 到 100 之和)

    day31 --------------------------------------------------------------- 实例045:求和 题目 统计 1 到 100 之和. 分析: ...

  8. 手把手教会将 Windows 窗体桌面应用从.NET Framework迁移到 .NET SDK/.NET 6 格式

    接上篇:手把手教会 VS2022 设计 Winform 高DPI兼容程序 (net461 net6.0 双出) https://www.cnblogs.com/densen2014/p/1614293 ...

  9. Intel CPU平台和架构介绍

    点击上方"开源Linux",选择"设为星标" 回复"学习"获取独家整理的学习资料! 服务器主板上数据传输流依次为CPU .内存.硬盘和网卡, ...

  10. LVM 逻辑卷学习

    一个执着于技术的公众号 前言 每个Linux使用者在安装Linux时都会遇到这样的困境:在为系统分区时,如何精确评估和分配各个硬盘分区的容量,因为系统管理员不但要考虑到 当前某个分区需要的容量,还要预 ...