常见的图像滤波方法
图像滤波方式线性滤波 线性滤波是一种图像处理方法,它是通过对图像像素周围的邻域进行加权平均来实现的 它被称为线性滤波,因为它的处理过程可以用线性算子的形式表示,这使得它可以通过卷积运算来实现 线性滤波中使用的权重通常称为卷积核或滤波器。卷积核是一个二维的矩阵,用于对图像进行卷积操作。在卷积运算中,卷积核被放置在图像的每个像素上,并将其与该像素周围的邻域进行卷积操作。卷积核中的每个元素表示一个权重,它决定了该像素对于卷积运算的贡献。卷积核中的权重可以根据需要进行调整,以实现不同的滤波效果。例如,可以使用一个平均值卷积核来进行均值滤波,使用一个高斯卷积核来进行高斯滤波等等 以下是一些应用场景: 图像去噪声:图像在传输或采集过程中会受到各种噪声的干扰,通过线性滤波可以去除图像中的噪声 图像平滑:有些图像具有噪声和纹理,这些会影响图像分析和处理的效果。线性滤波可以平滑图像并消除其中的纹理,从而使图像更容易分析和处理 图像增强:通过选择合适的滤波算法,可以对图像进行增强处理,使得图像更加清晰、细节更加明显 图像边缘检测:通过选择不同的滤波算法,可以对图像进行边缘检测,即提取出图像中的 ...
BitmapData
Bitmap图片处理的效率 在对图片进行处理时,如果每次都对 Bitmap 的对象直接处理,效率不高 原因:因为 bitmap 存储在内存中时,它的每一个像素点是被压缩编码过的,这种编码方式使得直接对其操作需要进行解压缩、编码等操作,增加了处理的时间和复杂度。而对于一些常见的图像处理操作(如旋转、裁剪、缩放等),可以使用一些专门优化过的算法,避免直接对位图数据进行操作,从而提高处理效率。此外,还可以使用硬件加速技术(如使用GPU)来加速位图处理。 改进的一些方法,在每次处理图像之前,对其进行 lock ,生成对应的 BitmapData 对象 Rectangle rect = new Rectangle(0, 0, bmp.Width, bmp.Height);BitmapData bmd = bmp.LockBits(rect, ImageLockMode.ReadWrite, bmp.PixelFormat); 类似于上面这种 注:BitmapData 类是将 Bitmap 里面的像素映射成为一个一维数组,Bitmap 中一个像素为 4bytes ,分别对应为 ARGB ...
lowBit与质数优化
lowBitlowBit一般用在树状数组里,主要功能是: 找到x的二进制数的最后一个1所表示的二进制 比如x=6=00000110 (2),-x=x(补)=11111010(2),lowBit(x)=10(2)=2 也就是说,就是lowbit(x)的值必然是2的幂次(最高位为1,其他位为0) x 1 2 3 4 5 6 7 8 9 lowbit(x) 1 2 1 4 1 2 1 8 1 注意: x不能等于0, 否则会进入死循环, 所以树状数组通常使用的下标会执行+1操作 lowbit只有一行操作,而且是位运算,效率很高 private int lowBit(int x){ return x & (-x);} 具体的应用后面在树状数组里讲 质数优化之前在LeetCode里看到这么一个题 给两个整数 left 和 right ,在闭区间 [left, right] 范围内,统计并返回 计算置位位数为质数 的整数个数。 1 <= left <= right &l ...
CSS布局整理
Flexbox(弹性盒子)是最新版本的 CSS(即 CSS3)中引入的一种强大且兼容性好的布局方法。使用 flexbox,我们可以很容易地处理好页面上的元素布局,并创建可以自动缩小和放大的动态用户界面。 CSS 网格是一个较新的标准,用于构建复杂的响应布局。它通过把 HTML 元素转换为具有行和列的网格容器,以便将子元素放置在所需要的位置。 CSS弹性盒子display:flex定位盒子只要在一个元素的 CSS 中添加 display: flex;,就可以使用其它 flex 属性来构建响应式页面了 display: flex; flex-direction属性 只要给父元素添加 flex-direction 属性,并把属性值设置为 row 或 column,即可横向排列或纵向排列它的所有子元素 flex-direction: row-reverse; flex-direction的其他可选值还有row-reverse和column-reverse。flex-direction 的默认值为 row justify-content属性 对于如何沿主轴线排放 flex 项目,有几种选 ...
视觉设计整理
视觉设计结合了排版、色彩理论、图形、动画、页面布局等,以表达独特的信息
CSS基础整理
CSS(级联样式表)告诉浏览器如何显示你在 HTML 中写入的文本和其他内容
HTML标签整理
HTML 是一种标记语言,使用特殊的语法或标记来向浏览器描述网页的结构
算法练-反转括号间字符串
题目给出一个字符串 s(仅含有小写英文字母和括号)。 请你按照从括号内到外的顺序,逐层反转每对匹配括号中的字符串,并返回最终的结果。 注意,结果中不应包含任何括号。 方法一:栈思路 对于括号序列相关的题,通用的解法是用递归或者栈。 从左至右地遍历整个字符串,用字符串 str 来记录当前层所遍历到的小写英文字母。对于当前遍历的字母: 如果是左括号:把 str 插入到栈中,并且把 str 置空,进入到下一层 如果是右括号:遍历到了右括号,说明当前层的字母已经遍历完了,把 str 反转,并把栈顶的字符串弹出,将反转后的 str 插入到弹出字符串的末尾,将结果赋值给 str 如果是小写英文字母:追加到 str 末尾 可以看到,只有在遍历到了右括号(第一个出现的右括号是最里面的)才会对字符串进行操作,这样可以保证能从括号里到外处理字符串 代码实现import java.util.*;public class test{ publi ...
算法练-最小栈的实现
针对王道考研第三章(栈与队列)的拓展思考题–最小栈的实现。本文会探讨三种方法来实现,分别是辅助类、单个栈和双栈。 题目 请设计一个栈,除了常规栈支持的pop与push函数以外,还支持min函数,该函数返回栈元素中的最小值。执行push、pop和min操作的时间复杂度必须为O(1)。 注:这里要求的是常量级的时间里找到最小值,所以先排序、再查找是不行的,我们必须在需要的时候就要得到最小值 方法一:辅助类(链表类)思路 我们知道,栈其实是一种操作受限的线性表,所以栈的一些操作可以通过链表来实现。这里要我们设计一个栈,而栈的实现我们可以使用链表,先定义一个链表类。 class ListNode{ public int val; public int min; //最小值 public ListNode next; public ListNode(int val, int min, ListNode next){ ...
Java基础-HashMap
什么是HashMap? 简单点来说,HashMap 是一个散列表,它的存储内容是键值对(key—value)映射 我们需要用算术操作将键(key)转化为数组的索引来访问数组中的键值对,这个算术操作其实就是找到一个合适的散列函数来将查找的键转化为数组的一个索引。理想情况下,不同的键能转化为不同的索引值,不过,如果出现两个或多个键都会散列到相同的索引值,就会发生散列冲突(也叫哈希冲突),具体解决方法会另外介绍。 HashMap 实现了 Map 接口,根据键的 HashCode 值存储数据,访问速度很快。其实哈希表的主干就是数组,因为在不考虑哈希冲突的情况下,仅仅只需要一次定位就能找到,这和数组的特点很像。 HashMap 的 key 和 value 的类型可以相同也可以不同,可以都是字符串(String)型的,也可以 key 是整型(Integer)、value 是字符串型的。HashMap 中的元素实 ...