机器视觉技术与应用实战(平均、高斯、水平prewitt、垂直prewitt、水平Sobel、垂直Sobel、拉普拉斯算子、锐化、中值滤波)

     扯一点题外话,这一个月经历了太多,接连感染了甲流、乙流,人都快烧没了,乙流最为严重,烧了一个星期的38-39度,咳嗽咳到虚脱。还是需要保护好身体,感觉身体扛不住几次连续发烧!(甲流乙流是病毒,提前准备好奥司他韦,这个是阻断病毒复制的药,48小时内效果是最明显的,不要像我一样等到中招了,才匆忙去买,送了3天,过了最佳时间.......)

———————————————————————————————————————————

首先,我们还是先引入一个概念,图像处理操作包括:转换操作、赋值操作、变换操作、逻辑操作、过滤操作。(过滤操作就是本节主体)

转换操作:

转换操作将输入图像转换为另外一种格式,比如说RGB图像转为灰度图像,灰度图像转为二值图像。 RGB转为灰度利用公式::

Grey =0.299*R+0.587*G+0.114*B

 在最前面的几节里面,我们了解到了RGB图像是3通道图像,一个像素的颜色由R、G、B决定。如果我们想从RGB转为灰度图像,就可以利用上面的公式实现。

灰度图像转为二值图像就是利用二值化,设定一个阈值,小于阈值为0,大于阈值为1,在之前的几节里面我们也是涉及到了的。

赋值操作:

初始化:将图像中所有的像素的灰度值赋值为某一个常数,这个里面必须要明确的是图像高度和宽度。

复制:将输入图像的每个像素灰度值复制输出到输出图像像素的灰度值中。

反转:灰度值的变换,假如一个图像灰度值范围为[0-255],设图像的一个像素的灰度值为x,图像反转后的 灰度值为Y=255-X

变换操作:

变换操作通常涉及到输入图像的频率域,空间域到频率域的转换需要傅里叶变换。

过滤操作:

过滤操作描述:为使用正方形、矩形或线性过滤矩阵对输入图像进行卷积

滤波器包括:平均、高斯、水平prewitt、垂直prewitt、水平Sobel、垂直Sobel、拉普拉斯算子、锐 化、中值滤波。

在我看来,对于一个滤波器来说,最能体现出滤波器的特点的地方应该是内核的元素的值。后面的不同滤波器代码可能都只是修改了内核的值。由于内容比较多,动手去实现就非常好理解!

平均滤波:平均过滤器旨在消除噪声

matlab代码如下:

clear;
n = 5;
I = imread('1.tif');
j = imnoise(I,'salt',0.02);
[height,width] = size(j);
FilterMid = j;
for row = (n+1)/2: height-(n-1)/2
for col = (n+1)/2:width-(n-1)/2
temp = double(j(row-((n-1)/2):row+((n-1)/2),col-((n-1)/2):col+((n-1)/2)));
template2 = sort(temp(:));
FilterMid(row,col) = template2((n*n+1)/2);
end
end
figure,subplot(1,3,1),imshow(I),title('原图像');
subplot(1,3,2),imshow(j),title('椒盐处理后的图像');
subplot(1,3,3),imshow(FilterMid),title('中值滤波后图像');

处理结果如下:

 高斯滤波:线性平滑滤波器,利用的是加权平均的处理方法,权重利用的是距离的远近距离越近权重越大,也就是说对中心像素点的像素值生成影响越大。

代码如下:

clear,clc;
Img = imread('1.tif');
M = size(Img);
if numel(M)>2%判断灰度图像还是彩色图像
gray = rgb2gray(Img);
else
gray = Img;
end
%创建滤波器
I = imnoise(gray,'salt',0.02);
W =fspecial('gaussian',[5,5],1);
G = imfilter(I,W,'replicate');
figure
subplot(1,3,1),imshow(gray),title('原图像');
subplot(1,3,2),imshow(I),title('加了噪声图像');
subplot(1,3,3),imshow(G),title('高斯滤波器处理后图像');

运行结果如下:

水平prewitt :水平Prewitt操作类似梯度滤波器一样,梯度滤波器也叫边缘滤波器,具有通过被考察像素某 一个方向的灰度变化的梯度(即出现突变的地方),找到边缘位置的作用,主打一个突出水平边缘效果。

垂直prewitt :垂直prewitt具有突出图像垂直边缘的效果。

matlab代码如下:

clear;
F = imread('1.png');
F = rgb2gray(F);
f = double(F);
[row,col] = size(f);
f1 = zeros(row,col);
f2 = zeros(row,col);
f3 = zeros(row,col);
gy = [1,0,-1;1,0,-1;1,0,-1];
gx = [-1,-1,-1;0,0,0;1,1,1];
for i=2:row-1
for j=2:col-1
fx = [f(i-1,j-1),f(i-1,j),f(i-1,j+1);f(i,j-1),f(i,j),f(i,j+1);f(i+1,j1),f(i+1,j),f(i+1,j+1)];
fy = [f(i-1,j-1),f(i-1,j),f(i-1,j+1);f(i,j-1),f(i,j),f(i,j+1);f(i+1,j1),f(i+1,j),f(i+1,j+1)];
Gx = gx.*fx;
Gy = gy.*fy;
A = abs(sum(Gx(:)));
B = abs(sum(Gy(:)));
C = ((sum(Gx(:)))^2+(sum(Gy(:)))^2)^0.5;
if A >= 50//50为阈值,后面B、C同理
f1(i,j) = 255;
end
if B >= 50
f2(i,j) = 255;
end
if C >=50
f3(i,j) = 255;
end
end
end
figure
subplot(2,2,1),imshow(F),title('原图像');
subplot(2,2,2),imshow(f1),title('水平prewitt');
subplot(2,2,3),imshow(f2),title('垂直prewitt');
subplot(2,2,4),imshow(f3),title('水平且垂直prewitt');

运行结果如下:

阈值的设置需要不断去调整,没有说固定的最佳的阈值。

Sobel: 

水平Sobel:同理于prewitt算子,可以突出水平边缘,但是却通过与中心像素点的距离修改了影响的参数。

垂直sobel同样如此。

matlab代码如下:

clear;
F = imread('1.bmp');
F = rgb2gray(F);
f = double(F);
[row,col] = size(f);
f1 = zeros(row,col);
f2 = zeros(row,col);
f3 = zeros(row,col);
gx = [-1,-2,-1;0,0,0;1,2,1];
gy = [1,0,-1;2,0,-2;1,0,-1];
for i=2:row-1
for j=2:col-1
fx = [f(i-1,j-1),f(i-1,j),f(i-1,j+1);f(i,j-1),f(i,j),f(i,j+1);f(i+1,j1),f(i+1,j),f(i+1,j+1)];
fy = [f(i-1,j-1),f(i-1,j),f(i-1,j+1);f(i,j-1),f(i,j),f(i,j+1);f(i+1,j1),f(i+1,j),f(i+1,j+1)];
Gx = gx.*fx;
Gy = gy.*fy;
A = abs(sum(Gx(:)));
B = abs(sum(Gy(:)));
C = ((sum(Gx(:)))^2+(sum(Gy(:)))^2)^0.5;
if A >= 50
f1(i,j) = 255;
end
if B >= 50
f2(i,j) = 255;
end
if C >=50
f3(i,j) = 255;
end
end
end
figure
subplot(2,2,1),imshow(F),title('原图像');
subplot(2,2,2),imshow(f1),title('水平sobel');
subplot(2,2,3),imshow(f2),title('垂直sobel');
subplot(2,2,4),imshow(f3),title('水平且垂直sobel');

运行结果如下:

拉普拉斯算子:

二阶导数算子,作用是突出边缘效果,也就是锐化的效果

matlab代码如下:

clear;
img= imread('1.bmp');
%I = rgb2gray(img);
I= im2double(img);
[m,n]=size(I);
result =zeros(size(I));
laplace = [-1,-1,-1;-1,8,-1;-1,-1,-1];
for i= 2:m-1
for j= 2:n-1
f = [I(i-1,j-1),I(i-1,j),I(i-1,j+1);I(i,j-1),I(i,j),I(i,j+1);I(i+1,j1),I(i+1,j),I(i+1,j+1)];
G= laplace.*f;
result(i,j)= abs(sum(G(:)));
end
end
img = im2uint8(img);
result = im2uint8(result);
figure
subplot(1,2,1),imshow(img),title('原图像');
subplot(1,2,2),imshow(result),title('拉普拉斯处理后图像');

运行结果如下:

锐化低和锐化图像: 

锐化:突出边缘

锐化低:突出边缘的同时平滑图像

代码如下:

clear;
img= imread('1.bmp');
%I = rgb2gray(img);
I= im2double(img);
[m,n]=size(I);
result =zeros(size(I));
result1 = zeros(size(I));
result2 = zeros(size(I));
laplace = [-1,-1,-1;-1,8,-1;-1,-1,-1];
sharpen = [-1,-1,-1;-1,9,-1;-1,-1,-1];
sharpen_low = [-1/8,-1/8,-1/8;-1/8,2,-1/8;-1/8,-1/8,-1/8];
for i= 2:m-1
for j= 2:n-1
f = [I(i-1,j-1),I(i-1,j),I(i-1,j+1);I(i,j-1),I(i,j),I(i,j+1);I(i+1,j1),I(i+1,j),I(i+1,j+1)];
G= laplace.*f;
G2 = sharpen.*f;
G3 =sharpen_low.*f;
result(i,j)= abs(sum(G(:)));
result1(i,j)= abs(sum(G2(:)));
result2(i,j)= abs(sum(G3(:)));
end
end
img = im2uint8(img);
result = im2uint8(result);
result1 = im2uint8(result1);
result2 = im2uint8(result2);
figure
subplot(2,2,1),imshow(img),title('原图像');
subplot(2,2,2),imshow(result),title('拉普拉斯处理后图像');
subplot(2,2,3),imshow(result1),title('锐化处理图像');
subplot(2,2,4),imshow(result2),title('锐化低处理图像');

结果如下:

中值滤波:取内核的中值作为中心元素的值。

代码如下:

clear;
n = 5;
img = imread('1.bmp');
j = imnoise(img,'salt',0.02);
[height,width] = size(j);
FilterMid = j;
for row = (n+1)/2:height-(n-1)/2
for col = (n+1)/2:width-(n-1)/2
temp = double(j(row-((n-1)/2):row+((n-1)/2),col-((n-1)/2):col+((n-1)/2)));
template2 = sort(temp(:));
FilterMid(row,col)= template2((n*n+1)/2);
end
end
figure
subplot(1,3,1),imshow(img),title('原图像');
subplot(1,3,2),imshow(j),title('加入椒盐噪声的图像');
subplot(1,3,3),imshow(FilterMid),title('中值滤波处理后的图像');

运行结果如下:

 均值滤波:取内核的均值作为中心元素的值

代码如下:

clear;
clc;
fn=imread('1.bmp');
f=imnoise(fn,'salt',0.02);
[row,col]=size(f);
f1 = zeros(row,col);
for i=2:row-1
for j=2:col-1
f2 =[f(i-1,j-1),f(i-1,j),f(i-1,j+1);f(i,j-1),f(i,j),f(i,j+1);f(i+1,j1),f(i+1,j),f(i+1,j+1)];
f1(i,j) = mean((f2(:)));
end
end
f1= round(f1);
%f1 = double2uint8(f1);
imshow(f1);
figure
subplot(1,3,1),imshow(fn),title('原图像');
subplot(1,3,2),imshow(f),title('加入噪声的图像');
subplot(1,3,3),imshow(f1,[0,255]),title('均值滤波处理后的图像');

运行结果如下:

建议去动手实现一下! 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/336656.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

hdu 4507 吉哥系列故事——恨7不成妻

吉哥系列故事——恨7不成妻 题意 一个正整数和 7 7 7 有关当且仅当满足以下条件之一: 数位中某一位是 7 7 7数位和能被 7 7 7 整除这个整数能被 7 7 7 整除 统计 [ l , r ] [l,r] [l,r] 内所有和 7 7 7 无关 的数字的 平方和 思路 这道题需要一点思维。我…

Excel·VBA合并工作簿2

其他合并工作簿的方法,见之前的文章《ExcelVBA合并工作簿》 目录 8,合并文件夹下所有工作簿中所有工作表,按表头汇总举例 8,合并文件夹下所有工作簿中所有工作表,按表头汇总 与之前的文章《ExcelVBA合并工作簿&#x…

【51单片机Keil+Proteus8.9】控制步进电机+LCD1602显示状态

步进电机控制 设计思路 电路设计: 选用AT89C51单片机作为电路核心部件,外加LM016L液晶显示屏作为显示,显示步进电机的Fast,Slow,Stop的三个状态将AT89C51单片机所选引脚与LM016L控制引脚相连,再将数据通…

Self-RAG:通过自我反思学习检索、生成和批判

论文地址:https://arxiv.org/abs/2310.11511 项目主页:https://selfrag.github.io/ Self-RAG学习检索、生成和批评,以提高 LM 的输出质量和真实性,在六项任务上优于 ChatGPT 和检索增强的 LLama2 Chat。 问题:万能L…

Python入门到精通(四)——Python函数

Python函数 一、函数的定义 二、函数的参数及返回值 1、函数的参数 2、函数的返回值 三、函数说明文档 四、函数的嵌套调用 五、变量的作用域 六、综合案例 一、函数的定义 定义: 调用: 函数:是组织好的,可重复使用的&…

第04章_IDEA的安装与使用(上)(认识,卸载与安装,JDK相关设置,详细设置,工程与模块管理,代码模板的使用)

文章目录 第04章_IDEA的安装与使用(上)本章专题与脉络1. 认识IntelliJ IDEA1.1 JetBrains 公司介绍1.2 IntelliJ IDEA 介绍1.3 IDEA的主要优势:(vs Eclipse)1.4 IDEA 的下载 2. 卸载与安装2.1 卸载过程2.2 安装前的准备2.3 安装过程2.4 注册2…

浪之潮科技:动力恢复清积碳,尾气治理三元催化修复

针对汽车出现油耗增加、动力减弱以及尾气检测不合格等情况,深圳市浪之潮科技有限公司(以下简称:浪之潮科技)求真务实、勇于创新,独创两大系统六大部位——动力恢复清积碳、尾气治理三元催化修复,为广大车主…

大模型 RAG 面试篇

1.LLMs 存在模型幻觉问题,请问如何处理? 检索LLM。 先用问题在领域数据库里检索到候选答案,再用LLM对答案进行加工。 2.基于LLM向量库的文档对话 思路是怎么样? 加载文件读取文本文本分割文本向量化问句向量化在文本向量中匹配…

软件测试工程师简历项目经验怎么写?

🔥 交流讨论:欢迎加入我们一起学习! 🔥 资源分享:耗时200小时精选的「软件测试」资料包 🔥 教程推荐:火遍全网的《软件测试》教程 📢欢迎点赞 👍 收藏 ⭐留言 &#x1…

探索世界,从一款好用的浏览器开始!

好用的浏览器分享 在这个数字化的时代,浏览器已经成为了我们生活中不可或缺的工具。从浏览新闻、社交媒体到工作学习,我们几乎无时无刻不在与浏览器打交道。那么,如何选择一款好用的浏览器呢?今天,我就来为大家分享几…

Java毕业设计-基于springboot的学习英语管理系统-第89期

获取源码资料,请移步从戎源码网:从戎源码网_专业的计算机毕业设计网站 项目介绍 基于springbootvue的医院管理系统:前端 vue、bootstrap、coreui,后端 maven、springmvc、spring、mybatis、redis,角色分为管理员、医…

2024年简历石沉大海,别投了,软件测试岗位饱和了....

🔥 交流讨论:欢迎加入我们一起学习! 🔥 资源分享:耗时200小时精选的「软件测试」资料包 🔥 教程推荐:火遍全网的《软件测试》教程 📢欢迎点赞 👍 收藏 ⭐留言 &#x1…

SpringMVC传递数据给前台

SpringMVC有三种方式将数据提供给前台 第一种 使用Request域 第二种 使用Model(数据默认是存放在Request域中) 与第一种方式其实是一致的 第三种 使用Map集合(数据默认是存放在Request域中)

Appium 环境配置

Appium 是一个开源的、跨平台的测试框架,可以用来测试 Native App、混合应用、移动 Web 应用(H5 应用)等,也是当下互联网企业实现移动自动化测试的重要工具。Appium 坚持的测试理念: •无需用户对 App 进行任何修改或…

git提交代码到远端仓库的方法详解

一、何为git git就是版本控制器,就比如说你新建了一个git文件夹,里面用于存放你的C语言实习报告,现在要用git对该文件夹进行接管。当你修改了你的C语言实习报告点击保存之后,就用git的相关命令,提交给git,让…

Mybatis面试题(三)

MyBatis 面试题 21、MyBatis 实现一对多有几种方式,怎么操作的? 有联合查询和嵌套查询。联合查询是几个表联合查询,只查询一次,通过在resultMap 里面的 collection 节点配置一对多的类就可以完成;嵌套查询是先查一个表,根据这个表里面的 结果的外键 id,…

Js-WebAPIs-事件流(三)

• 事件流与两个阶段说明 事件流指的是事件完整执行过程中的流动路径 说明:假设页面里有个div,当触发事件时,会经历两个阶段,分别是捕获阶段、冒泡阶段 简单来说:捕获阶段是 从父到子 冒泡阶段是从子到父 实际工作都是…

使用主动检索增强生成FLARE来实现更好的RAG

文章链接:https://arxiv.org/abs/2305.06983 项目代码:https://github.com/jzbjyb/FLARE 原文地址:Better RAG with Active Retrieval Augmented Generation FLARE 2023 年 11 月 18 日 欢迎深入探讨前瞻性主动检索增强生成 (FLARE)&…

对于随机生成图片接口浏览器走缓存的问题

前提场景 目前有一个api 他可以随机生成一张图片&#xff0c;我通过v-for循环一个Array渲染出来几个img 并且都调用了该接口&#xff0c;但是每个img都是一样的图片 具体代码如下 <div class"icon-group-box" v-for"item in groupList" :key"item…

22k+star一款自托管的开源的的好用的碎片化笔记软件 Memos超级详细部署教程

目录 1.拉取镜像 2.启动 3.体验 4.源码地址 1.拉取镜像 docker pull neosmemo/memos:stable 2.启动 创建目录 mkdir -p /opt/memos/ 启动 docker run -d --name memos -p 10006:5230 -v /opt/memos/:/var/opt/memos neosmemo/memos:stable 3.体验 浏览器输入下面地址…