多媒体技术--图像处理基础【一】

本文深入探讨了摄影原理,包括小孔成像、光圈与景深的关系,以及图像滤波技术。详细讲解了图像在计算机中的矩阵存储方式,介绍了傅里叶变换、高斯卷积等图像处理技术,并探讨了图片的几何变换方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

这学期选了赵万磊老师的课,感觉很多干货,在这里记录一下。

图片基础

在我们的日常生活中,80%的信息来自视觉,小孔成像是目前相机的基础,小孔成像为什么管用呢,因为光线是散射的,通过一个小的缝隙之后,每个点只有一个方向的光线通过并投影到幕布上,胶片是吸收光的,当它吸收这个方向来的光之后,就会呈现图形,若像下图,所有的光都混杂到一起,自然得到的胶片是灰色的。在这里插入图片描述

这里提到的小孔就是我们现在相机的光圈,那我们相机里还有棱镜,棱镜是干嘛的呢。如下图,这个棱镜可以将一个点发出来各个方向的点集中在幕布上的一个点,也就是幕布上收到的光线越多,图片也就更加清晰。由下图可以总结出,光圈越大景深越浅,光圈越小,看景深越深。在这里插入图片描述在这里插入图片描述
上图就是拿掉透镜后的效果。

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

焦距大,小光圈,景深深。

图片滤波

图片在计算机中储存使用矩阵方式,所以作为矩阵数据,就可以对他进行操作:
1、二维的傅里叶变换和DCT
2、图片卷积
在这里插入图片描述

图片是用0-255表示的,灰度图只有一个通道,彩色图片有三个通道RGB,每个通道都是从0-255.

知道图片在计算机中使用矩阵存储之后,我们就可以对他们进行线性变换和SVD分解。因为图片是多参数函数,所以我们可以做以下操作:
1、傅里叶变换;
2、泰勒展开;
3、找极大极小值。

傅里叶变换

在这里插入图片描述

以上是傅里叶分解的例子,傅里叶就是将某个函数用sin和cos表示,但是为什么这样展开是可行的呢,因为cosx和sinx是正交的,所以我们可以认为cosx和sinx组成了一个新的空间,变换后的结果不会有重叠向量。
在这里插入图片描述
在这里插入图片描述

由以上公式可以看到,傅里叶变换之后有两种参数,一个是每个项的系数,一个是每个项的角度,那么这两个参数哪个更重要呢,下面做了一个实验。
在这里插入图片描述
在这里插入图片描述

右边生成的结果更像豹子,所以我们可以总结角度携带的信息更多。

高斯卷积

在这里插入图片描述
高斯卷积就是用一个高斯核,在原图上不断移动,计算核扫过的框中的值。tip:使用一个5×5的核卷积和先用15的核扫,再用51的核扫,结果是一样的,但是可以节省时间。

DOG的计算:用不同方差的高斯核扫描原图,然后将相邻的两层相减,得到的结果就是DOG:
在这里插入图片描述
在这里插入图片描述
而DOG一般是图片中的一些边缘,但是看上图得到的边缘还是很宽,所以使用非最大值抑制后得到的边缘就比较清晰了,而且只剩下边缘。
在这里插入图片描述

图片几何变换

图片的几何变换包括以下几种:
1、平移
2、旋转
3、缩放
4、仿射变换(以上几种的结合)
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

图像镜面变换:
在这里插入图片描述
在这里插入图片描述

多媒体处理包括多媒体技术的描述及其实现的源代码还有他的图品作品import java.applet.AudioClip; import javax.swing.*; import java.awt.*; import java.awt.event.*; import java.net.*; // 声音播放程序 public class AudioPlayDemo extends JFrame implements ActionListener, ItemListener { boolean looping = false; //是否循环播放 String[] choics = { "chimes.wav", "start.wav" }; //声音文件名数组 URL file1 = getClass().getResource(choics[0]); //声音文件1 URL file2 = getClass().getResource(choics[1]); //声音文件2 AudioClip sound1 = java.applet.Applet.newAudioClip(file1); //声音剪辑对象1 AudioClip sound2 = java.applet.Applet.newAudioClip(file2); //声音剪辑对象2 AudioClip chosenClip = sound1; //选择的声音剪辑对象 JComboBox jcbFiles = new JComboBox(choics); //文件选择组合框 JButton playButton = new JButton("播放"); //播放按钮 JButton loopButton = new JButton("循环播放"); //循环播放按钮 JButton stopButton = new JButton("停止"); //停止播放按钮 JLabel status = new JLabel("选择播放文件"); //状态栏标签 JPanel controlPanel = new JPanel(); //控制面板用于包容按钮 Container container = getContentPane(); //获得窗口内容窗格 public AudioPlayDemo() { //构造器 super("声音播放程序"); //调用父类构造器设置窗口标题栏 jcbFiles.setSelectedIndex(0); //设置组合框选择项 jcbFiles.addItemListener(this); //为播放按钮添加项目监听器 //为播放按钮、循环播放按钮、停止播放按钮添加动作监听器 playButton.addActionListener(this); loopButton.addActionListener(this); stopButton.addActionListener(this); stopButton.setEnabled(false); //设置停止播放按钮不可用 //把播放按钮、循环播放按钮、停止播放按钮加入控制面板 controlPanel.add(playButton); controlPanel.add(loopButton); controlPanel.add(stopButton); //把文件选择组合框、控制面板、状态栏标签加入到窗口内容窗格 container.add(jcbFiles, BorderLayout.NORTH); container.add(controlPanel, BorderLayout.CENTER); container.add(status, BorderLayout.SOUTH); setSize(300, 130); //设置窗口大小 setVisible(true); //设置窗口可视 setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); //关闭窗口时退出程序 } //文件选择组合框事件处理 public void itemStateChanged(ItemEvent e) { if (jcbFiles.getSelectedIndex() == 0) { chosenClip = sound1; } else { chosenClip = sound2; } } //按钮事件处理 public void actionPerformed(ActionEvent event) { if (chosenClip == null) { status.setText("声音未载入"); return; //如果AudioClip对象为空,则直接返回 } Object source = event.getSource(); //获取用户洗涤激活的按钮 //播放按钮事件处理 if (source == playButton) { stopButton.setEnabled(true); //设置停止播放按钮可用 loopButton.setEnabled(true); //设置循环播放按钮可用 chosenClip.play(); //播放选择的声音剪辑对象次 status.setText("正在播放"); //设置状态栏信息 } //循环播放按钮事件处理 if (source == loopButton) { looping = true; chosenClip.loop(); //循环播放选择的声音剪辑对象 loopButton.setEnabled(false); //设置循环播放按钮不可用 stopButton.setEnabled(true); //设置停止播放按钮可用 status.setText("正在循环播放"); //设置状态栏信息 } //停止播放按钮事件处理 if (source == stopButton) { if (looping) { looping = false; chosenClip.stop(); //停止循环播放选择的声音剪辑对象 loopButton.setEnabled(true); //设置循环播放按钮可用 } else { chosenClip.stop(); //停止播放选择的声音剪辑对象 } stopButton.setEnabled(false); //设置循环播放按钮可用 status.setText("停止播放"); //设置状态栏信息 } } public static void main(String s[]) { new AudioPlayDemo(); //创建AudioPlayDemo对象 } }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值