直方图均匀化

任务:用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. Linux内核--链表结构(一)

    一.前言 Linux内核链表结构是一种双向循环链表结构,与传统的链表结构不同,Linux内核链表结构仅包含前驱和后继指针,不包含数据域.使用链表结构,仅需在结构体成员中包含list_head*成员就行 ...

  2. petite-vue源码剖析-逐行解读@vue-reactivity之Map和Set的reactive

    本篇我们会继续探索reactive函数中对Map/WeakMap/Set/WeakSet对象的代理实现. Map/WeakMap/Set/WeakSet的操作 由于WeakMap和WeakSet分别是 ...

  3. 4.26JMetre分离数据、响应断言、动态参数、响应管理

    修改 查询 默认查询 断言: 1.JSON断言 2.响应断言 :实际返回的值是否包含期望的值 参数化 相同的测试步骤,不同的测试数据.比如针对测试平台,使用不同的用户登陆进去来验证产品管理的业务. 在 ...

  4. stm32F103RCT6的DMA使用经历

    ​ DMA可以直接传输数据,减少了CPU的负担,是个很好的功能,但是用的时候难免会一头雾水.这次做个小小的串口收发程序就碰到了许多问题. 之前没有注意,选择了DMA的circular模式,然后奇怪的事 ...

  5. 2003031121-浦娟-python数据分析五一假期作业

    项目 内容 课程班级博客链接 20级数据班(本) 这个作业要求链接 Python作业 博客名称 2003031121-浦娟-python数据分析五一假期作业 要求 每道题要有题目,代码(使用插入代码, ...

  6. 这些 Shell 分析服务器日志命令集锦,收藏好

    关注「开源Linux」,选择"设为星标" 回复「学习」,有我为您特别筛选的学习资料~ 自己的小网站跑在阿里云的ECS上面,偶尔也去分析分析自己网站服务器日志,看看网站的访问量.看看 ...

  7. 请收藏,Linux 运维必备的 40 个命令总结,收好了~

    点击上方"开源Linux",选择"设为星标" 回复"学习"获取独家整理的学习资料! 1.删除0字节文件 find -type f -size ...

  8. 一文了解RPC框架原理

    点击上方"开源Linux",选择"设为星标" 回复"学习"获取独家整理的学习资料! 1.RPC框架的概念 RPC(Remote Proced ...

  9. Barbican密钥管理器服务

    Barbican服务介绍 Key Manager 服务 (barbican) 提供机密数据的安全存储.配置和管理.这包括密钥材料,例如对称密钥.非对称密钥.证书和原始二进制数据. Barbican 是 ...

  10. 精华!一张图进阶 RocketMQ

    前 言 大家好,我是三此君,一个在自我救赎之路上的非典型程序员. "一张图"系列旨在通过"一张图"系统性的解析一个板块的知识点: 三此君向来不喜欢零零散散的知识 ...