• 图像增强-图像反转两种方法比较

编程思路:
       为了反转图像,就可以通过开辟一个新的矩阵,然后由255减去原始图像对应的像素值赋给新的图像,之后展示图像。
还有一种方法就是直接通过matlab的常熟减去矩阵也可以实现反转。为了比较时间,在遍历行和列之前得到时间,在遍历完之后得到一个时间。两者之差就是第一种方法使用的时间。第二种方法得到时间的方法和上面的一样。
源代码:

clear;
clc;
close all;
img = imread('E:\photo\matlabtest\testone.jpg'); %得到彩色图像
img = rgb2gray(img);  %将其转换为灰度图像
[h w] = size(img);   %得到图片尺寸大小
img1 = zeros(h,w);    %创建一个全零矩阵
img1 = uint8(img1);  %上面默认为double,将其变为uint8类型
t1 = datetime;        %获取遍历前的时间
t11 = t1.Second;    %获取秒数
for i = 1 : h       %遍历行和列for j = 1 : wimg1(i,j)  = 255 - img(i,j);    %进行赋值end
end
t2 = datetime;   %获取遍历后的时间
t22 = t2.Second;   %获取秒数
t3 = datetime;     %获取直接减之前的时间
t33 = t3.Second;     %获取秒数
img2 = 255 - img;     %直接反转,相减。
t4 = datetime;        %获取直接减之后的时间
t44 = t4.Second;      %获取秒数
figure();       %画图
subplot(131),imshow(img),title("原图");
subplot(132),imshow(img1),title("增强图");
subplot(133),imshow(img2),title("直接减的图");

结果:

分析:
        第一种方法所用时间为0.143,第二种方法用时0.015,可见直接使用255-img的方法执行速度比遍历行和列快上接近10倍左右。反转就是黑-》白,白-》黑,用255-img,很好理解。

  • 非线性变换:对数变换

编程思路:
  对数变换,就是非线性变换,直接使用对数公式进行变换。
源代码:

%对数变换
img = imread('E:\photo\matlabtest\testone.jpg'); %得到彩色图像
img = rgb2gray(img);  %将其转换为灰度图像
img1 = double(img);
img2 = 35*log(img1+10); %执行对数变换
img2 = uint8(img2);
figure();
subplot(121),imshow(img),title("原图");
subplot(122),imshow(img2),title("对数变换图");

结果:

分析:
  需要注意的是,对数里面的数据类型是double的才行,然后通过对比可以得出:前面系数大的话会使图像整体变白,如果系数较小的话会使图像变暗。

  • 书上例题5.6(均衡化)

源代码:

%例5.6 直方图均衡化
image=rgb2gray(imread('E:\photo\matlabtest\testone.jpg'));            %读取原图转变为灰度化图像
histgram=imhist(image);                       %统计图像直方图
[h,w]=size(image);
NewImage=zeros(h,w);       %生成新图
s=zeros(256);
s(1)=histgram(1);
for t=2:256  s(t)=s(t-1)+histgram(t);                   %计算新的灰度值
end
for x=1:wfor y=1:hNewImage(y,x)=s(image(y,x)+1)/(w*h);   %生成新图像,概率end
end
subplot(2,2,1),imshow(image),title('couple灰度图像');
subplot(2,2,2),imhist(image),title('couple灰度图像的直方图');axis tight;
subplot(2,2,3),imshow(NewImage),title('直方图均衡化处理后的图像');
subplot(2,2,4),imhist(NewImage),title('直方图均衡化处理后的图像的直方图');axis tight;

结果:

分析:
直方图均衡化之后可以看到图明显的变得色彩分明了,明暗分布均匀。
而局部直方图均衡化就是对一个像素周围的区域进行直方图均衡化,然后将结果返回给中心的区域,过程需要自己确定模板的大小,一般都是奇数行奇数列,并且运行这个的时间是比较长的。

  • 手写imhist

编程思路:
方法一:每行每列遍历元素,创建256大小的矩阵,然后每次遇到一个像素值,它对应的坐标值+1;
方法二:直接循环256次,每次直接使用函数,去找小于等于像素值i的个数和i-1的个数,然后两者相减就是像素值为i的结果。
源代码:

%手写imhist
clear;
clc;
close all;
img = imread('E:\photo\matlabtest\testone.jpg'); %得到彩色图像
img = rgb2gray(img);
[h w] = size(img);
n=256;
hist(n)=0;   %创建矩阵
hisrorgams(n)=0;  %初值为0
for i = 1 : hfor j =1 : whist(img(i,j)) = hist(img(i,j))+1;  %遇到一个像素值,对应像素值的个数就加一end
end
for i=1:1:na=size(find(img<=i))-size(find(img<=(i-1))); %返回向量中非零元素的位置的总数,然后相减histograms(i)=a(1);
end
figure();
subplot(131),imhist(img),title("内置函数"),axis tight;
subplot(132),bar(1:1:256,hist),title("手写函数1"),axis tight;
subplot(133),bar(1:1:256,histograms),title("手写函数2"),axis tight;

结果:

分析:
   通过手写imhist,关键点是使用什么方法找出每个像素值对应的个数,可以一个一个数,或者直接使用find函数即可。然后使用bar作图。

  • 空域低通滤波

图像分别添加椒盐噪声与乘性噪声,手写实现3 * 3窗口均值滤波与中值滤波,并比交两种方法在不同噪声下的去噪效果。提示:嵌套使用for循环语句
椒盐噪声也称为脉冲噪声,是图像中经常见到的一种噪声,它是一种随机出现的白点或者黑点,可能是亮的区域有黑色像素或是在暗的区域有白色像素(或是两者皆有)。椒盐噪声的成因可能是影像讯号受到突如其来的强烈干扰而产生、类比数位转换器或位元传输错误等。例如失效的感应器导致像素值为最小值,饱和的感应器导致像素值为最大值。
乘性噪声普遍存在于现实世界的图像应用当中,如合成孔径雷达、超声波、激光等相干图像系统当中.与标准加性高斯白噪声相区别,乘性噪声符合瑞利或伽玛分布函数.乘性噪声对图像的污染严重,而有效地的处理乘性噪声图像比较困难,因为乘性噪声起伏较剧烈,均匀度较低。
编程思路:
(1)向灰度图像增加两种噪声。
(2)然后创建出四个同样大小图像,方便处理。
(3)然后利用循环对每一个像素点进行操作
(4)均值滤波:将该像素点周围包括其自己的3*3共九个灰度值求均值。
(5)中值滤波:将像素周围9个像素排序,然后取中值就行。
代码:

%手写imhist
clear;
clc;
close all;
img = imread('E:\photo\matlabtest\testone.jpg'); %得到彩色图像
img = rgb2gray(img);
[h w] = size(img);
imgj=imnoise(img,"salt & pepper"); %添加椒盐噪声
imgc=imnoise(img,"speckle");   %添加乘性噪声
figure();
subplot(231),imshow(imgj),title("椒盐噪声");
subplot(234),imshow(imgc),title("乘性噪声");
img1 = zeros(h+2,w+2);  %上下左右都扩充一行
img2 = zeros(h+2,w+2);
imgm = zeros(h+2,w+2);
imgmm = zeros(h+2,w+2);
imgcm = zeros(h+2,w+2);
imgcmm = zeros(h+2,w+2);
img3 = zeros(h+2,w+2);
img4 = zeros(h+2,w+2);
for i = 2:1:h+1for j=2:1:w+1imgm(i,j)=imgj(i-1,j-1);   %边界填充0,里面的值复制imgcm(i,j)=imgc(i-1,j-1);img1(i,j)=imgj(i-1,j-1);img2(i,j)=imgc(i-1,j-1);end
end
for i = 2:1:h-1for j=2:1:w-1imgmm(i,j)=(imgm(i-1,j)+imgm(i+1,j)+imgm(i,j)+imgm(i-1,j-1)+imgm(i,j-1)+imgm(i,j+1)+imgm(i+1,j-1)+imgm(i+1,j+1)+imgm(i-1,j+1))/9;   %取均值imgcmm(i,j)=(imgcm(i-1,j)+imgcm(i+1,j)+imgcm(i,j)+imgcm(i-1,j-1)+imgcm(i,j-1)+imgcm(i,j+1)+imgcm(i+1,j-1)+imgcm(i+1,j+1)+imgcm(i-1,j+1))/9;  img3(i,j)=Median(i,j,img1);  %取中值img4(i,j)=Median(i,j,img2);end
end
subplot(232),imshow(uint8(imgmm)),title("椒盐噪声用均值滤波");
subplot(235),imshow(uint8(imgcm)),title("乘性噪声用均值滤波");
subplot(233),imshow(uint8(img3)),title("椒盐噪声用中值滤波");
subplot(236),imshow(uint8(img4)),title("乘性噪声用中值滤波");
%显示的时候应该只展示图像原大小的图像,但是这里对结果没影响,就不再次转换了

结果:

分析:
  通过对比,椒盐噪声用中值滤波比较好。是因为椒盐噪声是附近某个点的像素值很大或者很小,因此位于排序的两边,对取值没影响,所以中值滤波对椒盐噪声好。而使用均值滤波,对图像多少有点影响。
通过对比,乘性噪声中,无论是均值滤波还是中值滤波,他两的作用几乎差不多,对图像的影响都不明显,处理的结果都差不多。它不能很好地保护图像细节,在图像去噪的同时也破坏了图像的细节部分,从而使图像变得模糊,不能很好地去除噪声点。

  • 手写编写sobel算子实现图像锐化

编程思路:
  图像边缘就是图像灰度值突变的地方,也就是图像在该部分的像素值变化速度非常之快,就比如在坐标轴上一条曲线有刚开始的平滑突然来个大转弯,在变化出的导数非常大。
Sobel算子主要用作边缘检测,它是一离散型差分算子,用来计算图像亮度函数灰度之近似值。
  边缘是指其周围像素灰度急剧变化的那些像素的集合。边缘存在于目标、背景和区域之间,所以,边缘是图像分割所依赖的最重要的依据。由于边缘是位置的标志,对灰度的变化不敏感,因此,边缘也是图像匹配的重要的特征。
  Sobel边缘检测的核心在于像素矩阵的卷积,卷积对于数字图像处理非常重要,很多图像处理算法都是做卷积来实现的。卷积运算的本质就是对指定的图像区域的像素值进行加权求和的过程,其计算过程为图像区域中的每个像素值分别与卷积模板的每个元素对应相乘,将卷积的结果作求和运算,运算到的和就是卷积运算的结果。

将Sobel算子的实现划分为五个步骤:
(1) 计算Gx与Gy与模板每行的乘积。
(2) 两个3x3矩阵的卷积即将每一行每一列对应相乘然后相加。
(3) 求得3*3模板运算后的Gx、Gy。
(4) 求Gx^2 + Gy^2的平方根或者直接对Gx和Gy取绝对值后求和。
(5)设置一个阈值,运算后的像素值大于该阈值输出为全1,小于该阈值输出为全0。
源代码:

%手写Sobel
clc;
clear;
close all;
RGB_data = imread('E:\photo\matlabtest\avator.jpg'); %读取图像
Gray_data = rgb2gray(RGB_data); %灰度化
[ROW COL]=size(Gray_data);
Sobel_Threshold1 = 150; %设置两个阈值
Sobel_Threshold = 150;
Sobel_Img = zeros(ROW,COL); %创建矩阵
Sobel_Img1 = zeros(ROW,COL);
for r = 2:ROW-1for c = 2:COL-1Sobel_x = Gray_data(r-1,c+1) + 2*Gray_data(r,c+1) + Gray_data(r+1,c+1) - Gray_data(r-1,c-1) - 2*Gray_data(r,c-1) - Gray_data(r+1,c-1);%分别计算Gx,GySobel_y = Gray_data(r-1,c-1) + 2*Gray_data(r-1,c) + Gray_data(r-1,c+1) - Gray_data(r+1,c-1) - 2*Gray_data(r+1,c) - Gray_data(r+1,c+1);Sobel_Num1 = abs(Sobel_x) + abs(Sobel_y);   %绝对值求和Sobel_Num = Sobel_x^2 + Sobel_y^2; %平方和if(Sobel_Num > Sobel_Threshold)     %比较之后设值Sobel_Img(r,c)=0;elseSobel_Img(r,c)=255;endif(Sobel_Num1 > Sobel_Threshold1)Sobel_Img1(r,c)=0;elseSobel_Img1(r,c)=255;endend
end
figure; %画图
subplot(131),imshow(Gray_data),title("原图");
subplot(132),imshow(Sobel_Img),title("Sobel算子得到的图像");
subplot(133),imshow(Sobel_Img1),title("Sobel算子得到的图像1");

结果:

分析:
   由结果可以看出,Sobel算子算出来的图像
相当于进行了边缘检测,通过边缘两侧的值的差得到像素值然后判断是否大于自己设定的阈值进行赋值。可以看出,绝对值之和和平方和得到的效果不一样,阈值设定的不同也会导致结果的不同。

  • 手写编写拉普拉斯算子实现图像锐化

编程思路:

之后进行卷积操作就行。
源代码:

clc;
clear;
close all;
img = imread('E:\photo\matlabtest\avator.jpg'); %读取图像
img = rgb2gray(img);
img=imnoise(img,"salt & pepper"); %添加椒盐噪声
[h w]=size(img);
Lapu=zeros(h,w);
for row = 2 : h-1for col = 2 : w-1Lapu(row,col)=abs(4*img(row,col) - img(row-1,col) -img(row,col-1) - img(row,col+1) - img(row+1,col+1));end
end
figure();
subplot(121),imshow(img),title("原图");
subplot(122),imshow(Lapu),title("拉普拉斯算子后的图");

结果:

分析:
  通过分析可以得到缺点:没有了边缘的方向信息;
而且双倍加强了部分噪声的影响。所以之后产生了Log算子和Dog算子,这里就不做阐述了。

手写图像反转,变换,imhist,均衡化,均值中值滤波,sobel以及拉普拉斯实现图像锐化相关推荐

  1. 【图像去噪】基于matlab GUI均值+中值滤波图像去噪(含PNSR)【含Matlab源码 372期】

    ⛄一.图像去噪及滤波简介 1 图像去噪 1.1 图像噪声定义 噪声是干扰图像视觉效果的重要因素,图像去噪是指减少图像中噪声的过程.噪声分类有三种:加性噪声,乘性噪声和量化噪声.我们用f(x,y)表示图 ...

  2. 数字图像处理实验(三)|图像增强{归一化直方图imhist(f)/numel(f)、直方图均衡化histeq、生成线性空间滤波fspecial、中值滤波medfilt2}(附matlab实验代码截图)

    文章目录 一.实验目的 二.实验原理 1. 基本亮度变换函数 2.直方图均衡化 3.空间域滤波 三.预备知识: 四.实验内容 1.灰度修正 2.直方图均衡化: 3.空间域滤波 4. 频域率滤波 五.思 ...

  3. CV:计算机视觉技术之图像基础知识(一)—以python的cv2库来了解计算机视觉图像基础(傅里叶变换-频域-时域/各种滤波器-线性-非线性-均值-中值-高斯-双边)

    CV:计算机视觉技术之图像基础知识(一)-以python的cv2库来了解计算机视觉图像基础(傅里叶变换-频域-时域/各种滤波器-线性-非线性-均值-中值-高斯-双边) 目录 一.图像中的傅里叶变换 1 ...

  4. 图像滤波算法整理--均值、中值、高斯、拉普拉斯算子、梯度算子:

    首先分为平滑空间滤波器和锐化空间滤波器来进行介绍.平滑空间滤波器主要用于模糊处理和降低噪声,主要两类:均值滤波器和中值滤波器.锐化空间滤波器主要是:拉普拉斯算子和梯度算子. 一.均值滤波方法:对高斯噪 ...

  5. 《OpenCv视觉之眼》Python图像处理五 :Opencv图像去噪处理之均值滤波、方框滤波、中值滤波和高斯滤波

    本专栏主要介绍如果通过OpenCv-Python进行图像处理,通过原理理解OpenCv-Python的函数处理原型,在具体情况中,针对不同的图像进行不同等级的.不同方法的处理,以达到对图像进行去噪.锐 ...

  6. 均值滤波及中值滤波的区别

    参考 https://blog.csdn.net/cjsh_123456/article/details/79261271 进行个人附加修改 均值滤波和和中值滤波都可以起到平滑图像,滤去噪声的功能.均 ...

  7. 转载之-中值滤波均值滤波

    转自:openCV之中值滤波&均值滤波(及代码实现):https://blog.csdn.net/weixin_37720172/article/details/72627543  在开始我们 ...

  8. open cv均值 中值 高斯 双边高斯 滤波及模糊

    /* 模糊与消噪 模糊原理(线性滤波) ●Smooth/Blur 是图像处理中最简单和常用的操作之一 ●使用该操作的原因之一-就为了给图像预处理时候减低噪声 ●使用Smooth/Blur操作其背后是数 ...

  9. 采用灰度分组统计方法实现图像中值滤波

    中值滤波是图像处理中常用的一种噪声滤波方法.传统的图像中值滤波代码采用排序方法实现,处理速度主要取决于排序算法,但无论什么排序算法,总离不开大量的元素比较.交换或移动,而这些恰好是当前计算机处理的&q ...

  10. 基于Matlab的图像处理②(图像增强技术,中值滤波,均值滤波)

    目录 一.常用函数 1.导入图像 2.显示图像 3.显示图片色彩直方图 4.调整对比度 5.分块显示 6.导出图像 7.中值滤波 8.增加噪声 9.灰度函数 二.运行代码 三.效果 一.常用函数 1. ...

最新文章

  1. redis的spring的xml配置
  2. pytorch线性回归_PyTorch中的线性回归
  3. 多生产者_通知:生产者补贴!打卡时间!定了
  4. 6.3.2线索二叉树
  5. 计算机专业3d游戏设计,史塔福郡大学3D计算机游戏设计理学硕士研究生申请要求及申请材料要求清单...
  6. angularJS限制 input-text 只能输入数字
  7. 第二章 ELKstack部署及配置
  8. 阿里服务器降温系统,双十一服务器靠“泡澡”降温?阿里看上了3M的这项“冷”科技...
  9. 通过案例学习调优之--Oracle ASH
  10. 基于DEAP库的python进化算法-5.遗传算法求解TSP问题的改进
  11. C# list删除 另外list里面的元素_python学习笔记第三课:List(列表)
  12. java 解码_如何在Java中进行URL解码?
  13. 内存和flash区别
  14. —— GPS测量原理及应用复习 ——
  15. 一个问题的暴漏有多难? 过五关!!!
  16. 王者荣耀所有英雄皮肤爬取
  17. 初识swipe.js
  18. 2022年1月国产数据库排行榜:TiDB霸榜两年势头不减,openGauss与OceanBase分数大涨
  19. Gurobi--Error code: 10005. Unable to retrieve attribute solved ‘Pi‘ 解决
  20. 【金猿投融展】DataPipeline——成为中国的世界级数据中间件厂商

热门文章

  1. JavaWeb教程———监听器
  2. python2.7中文手册下载_python 2.7.12中文文档下载|
  3. 前端开发_开发软件Hbuilder简介
  4. Android SDK 环境变量配置
  5. Python数学问题2:求100以内素数之和
  6. .NET程序员面试题总结
  7. 使用 Transmission 制作种子命令
  8. rest服务理解以及restful api
  9. 层次图和HIPO图---描绘软件结构的图形工具
  10. 热血江湖辅助制作视频教程