基本的操作做起来很方便,

更高级的话还是建议open cv或者photoshop这样的

图像卷积的原理:找到一篇文章讲得很清楚

ImageConvolve练习

给出image和kernel的卷积



padding是说对image外围进行填充,用全0,还是Extrapolation,或者其他的

不然卷积得到的图像的size比image小

original

Import@"ExampleData/applepicking.jpg"

right sobel 垂直边检测

下面的是输入文本形式,复制粘贴过去shift enter就能运行了

ImageConvolve[Import@"ExampleData/applepicking.jpg", \!\(\*
TagBox[
RowBox[{"(", "", GridBox[{
{
RowBox[{"-", "1"}], "0", "1"},
{
RowBox[{"-", "2"}], "0", "2"},
{
RowBox[{"-", "1"}], "0", "1"}
},
GridBoxAlignment->{
"Columns" -> {{Center}}, "ColumnsIndexed" -> {},
"Rows" -> {{Baseline}}, "RowsIndexed" -> {}},
GridBoxSpacings->{"Columns" -> {
Offset[0.27999999999999997`], {
Offset[0.7]},
Offset[0.27999999999999997`]}, "ColumnsIndexed" -> {}, "Rows" -> {
Offset[0.2], {
Offset[0.4]},
Offset[0.2]}, "RowsIndexed" -> {}}], "", ")"}],
Function[BoxForm`e$,
MatrixForm[BoxForm`e$]]]\)](*检测垂直边*)

之所以说right sobel 是看1,2,1确实是在正右方

top sobel 水平边检测

ImageConvolve[Import@"ExampleData/applepicking.jpg", \!\(\*
TagBox[
RowBox[{"(", "", GridBox[{
{"1", "2", "1"},
{"0", "0", "0"},
{
RowBox[{"-", "1"}],
RowBox[{"-", "2"}],
RowBox[{"-", "1"}]}
},
GridBoxAlignment->{
"Columns" -> {{Center}}, "ColumnsIndexed" -> {},
"Rows" -> {{Baseline}}, "RowsIndexed" -> {}},
GridBoxSpacings->{"Columns" -> {
Offset[0.27999999999999997`], {
Offset[0.7]},
Offset[0.27999999999999997`]}, "ColumnsIndexed" -> {}, "Rows" -> {
Offset[0.2], {
Offset[0.4]},
Offset[0.2]}, "RowsIndexed" -> {}}], "", ")"}],
Function[BoxForm`e$,
MatrixForm[BoxForm`e$]]]\)](*检测水平边*)

之所以说top sobel 是看1,2,1确实是在正上方

通过一个平方内核的卷积使图像变平滑

ImageConvolve[Import@"ExampleData/applepicking.jpg",
BoxMatrix[1]/9](*{{1/9,1/9,1/9},{1/9,1/9,1/9},{1/9,1/9,1/9}},使图像平滑*)

类似ConstantArray[1, {1, 21}]/21.这样的水平行向量来做水平方向模糊

ImageConvolve[Import@"ExampleData/applepicking.jpg",
ConstantArray[1, {1, 21}]/21.](*水平方向模糊*)

做竖直方向模糊

ImageConvolve[Import@"ExampleData/applepicking.jpg",
ConstantArray[1, {21, 1}]/21.](*竖直方向模糊*)

emboss,浮雕效果

ImageConvolve[Import@"ExampleData/applepicking.jpg", \!\(\*
TagBox[
RowBox[{"(", "", GridBox[{
{
RowBox[{"-", "2"}],
RowBox[{"-", "1"}], "0"},
{
RowBox[{"-", "1"}], "1", "1"},
{"0", "1", "2"}
},
GridBoxAlignment->{
"Columns" -> {{Center}}, "ColumnsIndexed" -> {},
"Rows" -> {{Baseline}}, "RowsIndexed" -> {}},
GridBoxSpacings->{"Columns" -> {
Offset[0.27999999999999997`], {
Offset[0.7]},
Offset[0.27999999999999997`]}, "ColumnsIndexed" -> {}, "Rows" -> {
Offset[0.2], {
Offset[0.4]},
Offset[0.2]}, "RowsIndexed" -> {}}], "", ")"}],
Function[BoxForm`e$,
MatrixForm[BoxForm`e$]]]\)](*emboss实现浮雕效果*)

高斯模糊

ImageConvolve[Import@"ExampleData/applepicking.jpg",
GaussianMatrix[30]](*高斯模糊,或者叫毛玻璃?*)

我不是很懂这个,我猜毛玻璃效果就是拿高斯模糊做的?

sharpen锐化

ImageConvolve[Import@"ExampleData/applepicking.jpg", \!\(\*
TagBox[
RowBox[{"(", "", GridBox[{
{"0",
RowBox[{"-", "1"}], "0"},
{
RowBox[{"-", "1"}], "5",
RowBox[{"-", "1"}]},
{"0",
RowBox[{"-", "1"}], "0"}
},
GridBoxAlignment->{
"Columns" -> {{Center}}, "ColumnsIndexed" -> {},
"Rows" -> {{Baseline}}, "RowsIndexed" -> {}},
GridBoxSpacings->{"Columns" -> {
Offset[0.27999999999999997`], {
Offset[0.7]},
Offset[0.27999999999999997`]}, "ColumnsIndexed" -> {}, "Rows" -> {
Offset[0.2], {
Offset[0.4]},
Offset[0.2]}, "RowsIndexed" -> {}}], "", ")"}],
Function[BoxForm`e$,
MatrixForm[BoxForm`e$]]]\)](*sharpen can make the image more vivid*)

The sharpen kernel emphasizes differences in adjacent pixel values. This makes the image look more vivid.

outline(also called "edge" kernel)

ImageConvolve[Import@"https://img2020.cnblogs.com/blog/1943228/202102/1943228-20210211120157952-1609166322.png", \!\(\*
TagBox[
RowBox[{"(", "", GridBox[{
{
RowBox[{"-", "1"}],
RowBox[{"-", "1"}],
RowBox[{"-", "1"}]},
{
RowBox[{"-", "1"}], "8",
RowBox[{"-", "1"}]},
{
RowBox[{"-", "1"}],
RowBox[{"-", "1"}],
RowBox[{"-", "1"}]}
},
GridBoxAlignment->{
"Columns" -> {{Center}}, "ColumnsIndexed" -> {},
"Rows" -> {{Baseline}}, "RowsIndexed" -> {}},
GridBoxSpacings->{"Columns" -> {
Offset[0.27999999999999997`], {
Offset[0.7]},
Offset[0.27999999999999997`]}, "ColumnsIndexed" -> {}, "Rows" -> {
Offset[0.2], {
Offset[0.4]},
Offset[0.2]}, "RowsIndexed" -> {}}], "", ")"}],
Function[BoxForm`e$,
MatrixForm[BoxForm`e$]]]\)](*outline*)

结果如下图所示,可以看到效果一般,

可以使用很多更加有效的方法

反正万物皆可AI,DL,RL,NN。。。。。。

Mathematica做数字图像处理中的ImageConvolve练习的更多相关文章

  1. 彻底理解数字图像处理中的卷积-以Sobel算子为例

    彻底理解数字图像处理中的卷积-以Sobel算子为例 作者:FreeBlues 修订记录 2016.08.04 初稿完成 概述 卷积在信号处理领域有极其广泛的应用, 也有严格的物理和数学定义. 本文只讨 ...

  2. 初探FFT在数字图像处理中的应用(fft2函数的用法)

    初探FFT在数字图像处理中的应用 一般FFT在通信等领域都做的一维变换就能够了.可是在图像处理方面,须要做二维变换,这个时候就须要用到FFT2. 在利用Octave(或者matlab)里面的fft2( ...

  3. 数字图像处理中的4邻接,8邻接与m邻接

    像素之间的邻接性: 4邻接.如果q在集合N4(p)中,则具有V中数值的两个像素p和q是4邻接的. 8邻接.如果q在集合N8(p)中,则具有V中数值的两个像素p和q是8邻接的. m邻接(混合邻接).如果 ...

  4. paper 76:膨胀、腐蚀、开、闭运算——数字图像处理中的形态学

    膨胀.腐蚀.开.闭运算是数学形态学最基本的变换.本文主要针对二值图像的形态学膨胀:把二值图像各1像素连接成分的边界扩大一层(填充边缘或0像素内部的孔):腐蚀:把二值图像各1像素连接成分的边界点去掉从而 ...

  5. 卷积神经网络CNN在自然语言处理中的应用

    卷积神经网络(Convolution Neural Network, CNN)在数字图像处理领域取得了巨大的成功,从而掀起了深度学习在自然语言处理领域(Natural Language Process ...

  6. 【雕爷学编程】MicroPython动手做(08)——零基础学MaixPy之识别颜色

    早上用百度搜了一下“颜色识别”,多少有了一点大致的概念,还是老办法,动手做,多实验,往前走,还请各位老师多多指点. OpenCV(百度百科)是一个基于BSD许可(开源)发行的跨平台计算机视觉库,可以运 ...

  7. C#数字图像处理算法学习笔记(二)--点运算与直方图

    C#数字图像处理算法学习笔记(二)--点运算与直方图 在数字图像处理中,点运算是一种简单而重要的技术.点运算只是根据对象的像素的输入灰度值来决定像素的输出灰度值的图像处理运算.它有时也被称为对比度增强 ...

  8. Atitit 图像处理和计算机视觉的分类 三部分 图像处理 图像分析 计算机视觉

    Atitit 图像处理和计算机视觉的分类 三部分 图像处理 图像分析 计算机视觉 1.1. 按照当前流行的分类方法,可以分为以下三部分:三部分 图像处理 图像分析 计算机视觉1 1.2. 图像处理需要 ...

  9. OpenGL学习笔记1——第一个程序

    学习的参考书基本是按照GL编程指南,如果有消息机制概念,对于GLUT的理解是很自然的.下面就按照自己写的第一个程序详细解释一下GL,还是比较容易上手的. 程序实现的功能是,根据当前随即种子摇出来的结果 ...

  10. Atitit 图像金字塔原理与概率 attilax的理解总结qb23

    Atitit 图像金字塔原理与概率 attilax的理解总结qb23 1.1. 高斯金字塔  (  Gaussianpyramid): 拉普拉斯金字塔 (Laplacianpyramid):1 1.2 ...

随机推荐

  1. nginx 工作流程

    NGINX 把http请求处理流程划分为11个阶段,逻辑细分,以模块为单位进行处理.各个阶段可以包含多个http模块,每个阶段以流水线的形式处理请求.这样的分层处理模式与计算机网络的7层模式类似,每个 ...

  2. HDFS 内部工作机制

    HDFS 内部工作机制 HDFS集群分为两大角色:NameNode.DataNode (Secondary Namenode) NameNode 负责管理整个文件系统的元数据 DataNode 负责管 ...

  3. Day10-数组

    数组 一.什么是数组 数组是相同数据类型的有序集合 数字描述的是相同类型的若干个数据,按照一定的先后次序排列组合而成 其中.每一个数据称作一个数组元素,每个数组元素可以通过一个下表来访问它们 二.数组 ...

  4. 【peewee】Python使用peewee时where中不同类型比较的问题

    问题 以学生表为例,TableStudents表中age字段是TextField类型,想要筛选出18岁以上的学生 TableStudents.select().where(TableStudents. ...

  5. 在Eclipse 中导入maven项目, progress对话框中出现importing maven project的进度条卡住

    一.在Eclipse配置Maven 方法1:在Eclipse上下载,太慢了,不用 方法2:在电脑本地下载,然后Eclipse载入 二.方法2详细步骤 1.官网下载:http://maven.apach ...

  6. webpack配置跨域proxy

    首先新建一个项目: 安装vue-cli: npm i -g @vue/cli npm i -g @vue/cli-init 安装webpack: npm install webpack -g vue新 ...

  7. idea创建maven + tomcat项目

    移动文件夹: 找到tomcat文件目录 配置完成,添加测试html文件: 运行 修改默认路径:

  8. 微信小程序地理定位和城市选择列表

    1.先获取用户是否授权地理定位,如果没有让其跳转到设置页面手动开启(获取到的位置是经纬度,需要借助其他地图SDK的地址逆解析获取省市区的名字) getSetting() { wx.getSetting ...

  9. 数据库软件mysql的卸载及安装

    mysql安装时找了好多教程,一直安装不成功,后来终于安装成了,浅写一下教程. 首先时mysql的卸载,如果安装失败或者之前下载过旧版本,那么安装时会出现start service错误,解决方法就是将 ...

  10. mysql驱动下载

    下载地址:https://dev.mysql.com/downloads/connector/j/ 下载步骤:Select Operating System: Platform Independent