直方图均匀化

任务:用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. 帝国CMS 后台登录空白

    编辑/e/config/config.php中 $ecms_config['esafe']['ckfromurl']=0; //是否启用来源地址验证,0为不验证,1为全部验证,2为后台验证,3为前台验 ...

  2. 面试官:ZAB协议是什么?

    哈喽!大家好,我是小奇,一位不靠谱的程序员 小奇打算以轻松幽默的对话方式来分享一些技术,如果你觉得通过小奇的文章学到了东西,那就给小奇一个赞吧 文章持续更新 一.前言 这天是越来越热了,但是还是有很多 ...

  3. vue3组合式API

    vue3组合式API 为什么要用组合式API,我们来看看它是如何解决vue2的局限性的 1.vue2的局限性 当组件内容越来越多,逻辑越来越复杂,可读性就会降低,并且难以维护. vue2组件采用配置式 ...

  4. Blazor使用区域(Area)

    在MVC中,我们经常使用区域(Area)来区分各个模块,比如后台我们可以写一个Admin的Area. 到了Blazor时代,已经不推荐这么做了,现在推荐的做法是通过Url来区分,比如Admin可以配置 ...

  5. 【题解】金牌导航-高斯消元/Luogu P3232 游走

    题目描述: 详细分析: 我们对于编号的分配,很明显可以发现如下的分配就是期望最小的:对经过的期望次数越大的边赋予更小的编号. 那么问题就转化为了怎么求一条边的经过的期望次数,我们发现边数非常大所以肯定 ...

  6. XCTF练习题---MISC---gif

    XCTF练习题---MISC---gif flag:flag{FuN_giF} 解题步骤: 1.观察题目,下载附件 2.观察下载的附件,发现是由黑白块组成的,试着拼接二维码,好像不太对,再仔细看看感觉 ...

  7. 一文带你速懂虚拟化KVM和XEN

    来源 :蛋蛋团 前言 "云计算"这个技术经过十余年的普及到如今已经可以称得上是家喻户晓了,基于云计算平台,在多个领域内创造了一个又一个的记录:电子商务里亿万人同时在线抢购的的&qu ...

  8. Android 4.4系统,User模式adb默认开启,取消授权,开启root调试记录

    开启User模式adb,取消授权,修改如下: 1. /build/core/main.mk  修改以下内容 ifeq (true,$(strip $(enable_target_debugging)) ...

  9. Blazor和Vue对比学习(基础1.3):属性和父子传值

    组件除了要解决视图层展示.视图层与逻辑层的数据绑定,还需要解决一个重大问题,就是在组件树中实现数据传递,包括了父到子.子到父.祖到孙,以及任意组织之间.而我们上一章讲到的实现双向绑定的两个指令,Vue ...

  10. os模块,sys模块,json模块,subprocess模块

    os模块 一·什么是os模块 os模块提供了多数操作系统的功能接口函数.当os模块被导入后,它会自适应于不同的操作系统平台,根据不同 的平台进行相应的操作,在python编程时,经常和文件.目录打交道 ...