当前位置: 首页 > news >正文

Chapter07_图像压缩编码

文章目录

  • 图像压缩编码
  • 图像压缩编码基础
    • 图像压缩的基本概念
      • 信息相关
      • 信息冗余
      • 信源编码及其分类
    • 图像编码模型
      • 信源编码器模型
      • 信源解码器模型
    • 数字图像的信息熵
      • 信源符号码字平均长度
      • 信息熵
      • 信息量
  • 变长编码
    • 费诺码
    • 霍夫曼编码
  • 位平面编码
    • 格雷码

图像压缩编码

数字图像的压缩是指在满足一定的图像质量要求条件(比如保真度评分或信噪比值)下,通过寻求图像数据的更有效地表征形式,以便用最少的比特数表示图像或表示图像中所包含信息的技术

图像压缩编码基础

图像压缩的基本概念

信息相关

在绝大多数图像的像素之间, 各像素行和帧之间存在着较强的相关性
从统计观点出发,就是每个像素的灰度值(或颜色值)总是和其周围的其它像素的灰度值(或颜色值)存在某种关系,应用某种编码方法减少这些相关性就可实现图像压缩

【引例】

在这里插入图片描述

上图的黑白像素序列共41位
新的编码只需21位:1,0101,1111,0111,1011,0011

由此可见,利用图像中各像素之间存在的信息相关,可实现图像编码信息的压缩

信息冗余

从信息论的角度来看, 压缩就是去掉信息中的冗余。即保留确定信息,去掉可推知的确定信息,用一种更接近信息本质的描述来代替原有的冗余描述

图像数据存在的冗余可分为三类:
① 编码冗余;② 像素间的冗余;③ 心里视觉冗余

  • 编码冗余

    由于大多数图像的直方图不是均匀(水平)的,所以图像中某个或某些灰度级会比其它灰度级具有更大的出现概率,如果对出现概率大和出现概率小的灰度级都分配相同的比特数,必定会产生编码冗余,即如果一个图像的灰度级编码,使用了多于实际需要的编码符号,就称该图像包含了编码冗余

    【例】

    在这里插入图片描述

  • 像素间的冗余

    所谓“像素间的冗余”,是指单个像素携带的信息相对较少,单一像素对于一幅图像的多数视觉贡献是多余的, 它的值可以通过与其相邻的像素的值来推断

    【例】

    在这里插入图片描述

  • 心里视觉冗余

    心里视觉冗余是指,在正常的视觉处理过程中那些不十分重要的信息,即一些信息在一般的视觉处理中,比其他信息的相对重要程度要小,这种信息就被称为视觉心理冗余

信源编码及其分类

  • 信源编码的概念:图像压缩的目标是在满足一定的图像质量的条件下,用尽可能少的比特数来表示原图像,以减少图像的存储容量和提高图像的传输效率,在信息论中,把这种通过减少冗余数据来实现数据压缩的过程称为信源编码
  • 信源编码的分类:无失真编码有失真编码
    • 无失真压缩也称为无损压缩,是一种在不引入任何失真的条件下使表示图像的数据比特率为最小的压缩方法
    • 有失真压缩也称为有损压缩,是一种在一定比特率下获得最佳保真度,或在给定的保真度下获得最小比特率的压缩方法

图像编码模型

在这里插入图片描述

  • 信道编码器和信道解码器是一种用来实现抗干扰、抗噪声的可靠数字通信技术措施,信道编码器是通过向信源编码数据中插入可控制的冗余数据来减少对信道噪声的影响的
  • 信源编码器的作用就是减少或消除输入图像中的编码冗余

信源编码器模型

在这里插入图片描述

  • 映射变换器(减少像素冗余)

    映射变换器将输入的图像数据转换为可以减少输入图像中像素间冗余的表示格式,其输出是比原始图像数据更适合于高效压缩的图像表示形式

    典型的映射变换包括:线性预测变换、酉变换、多分辨率变换等

  • 量化器

    量化器用于对映射变换后的变换系数进行量化,以便产生表示被压缩图像的有限数量的符号

    利用量化器对映射变换后的变换系数进行量化会导致部分信息的损失

  • 符号编码器

    符号编码器的作用是对量化器输出的每一个符号分配一个码字或二进制比特流

    在这里插入图片描述

    输入 X 称为信源符号集,集合中的每一个元素 x i x_i xi称为信源符号
    输出W 称为代码,集合中的每一个元素 w i w_i wi 称为码字
    A 称为码元集,集合中的每一个元素 a j a_j aj 称为码元

信源解码器模型

在这里插入图片描述

数字图像的信息熵

信源符号码字平均长度

设有信源符号集 X = { x 1 , x 2 , … , x n } X=\{ x_1,x_2 ,…,x_n \} X={x1,x2,,xn},信源符号出现的概率为 { P ( x 1 ) , P ( x 2 ) , … , P ( x n ) } \{P(x_1),P(x_2),…,P(x_n)\} {P(x1),P(x2)P(xn)} ,对 X 编码得到的代码为 W = { w 1 , w 2 , … , w n } W=\{w_1,w_2,…,w_n\} W={w1,w2,wn},其中每个码字 w i w_i wi 的比特数(长度)为 L ( x i ) L(x_i) L(xi)
则表示每个信源符号码字的平均长度(比特数)为:
L ‾ = ∑ i = 1 n P ( x i ) ⋅ l ( x i ) \overline{L}=\displaystyle\sum^n_{i=1}P(x_i)·l(x_i) L=i=1nP(xi)l(xi)

信息熵

信息熵是一个系统信息含量的量化指标,通常用来作为系统优化的目标或者参数选择的判据

信源的熵定义为 H ( X ) = ∑ i = 1 n P ( x i ) ⋅ l o g 2 P ( x i ) H(X)=\displaystyle\sum^n_{i=1}P(x_i)·log_2P(x_i) H(X)=i=1nP(xi)log2P(xi) ,熵的单位是b/s,表示每个符号的比特数

【例1】设有一个随机变量 X 有8 种可能的状态 x i ( i = 1 , 2 , . . . , 8 ) x_i(i=1,2,...,8) xi(i=1,2,...,8) ,每个状态都是等可能的,则该随机变量的熵为:
H ( X ) = ∑ i = 1 8 1 8 ⋅ l o g 2 1 8 = − 8 × 1 8 l o g 2 1 8 = 3 b i t s H(X)=\displaystyle\sum^8_{i=1}\frac{1}{8}·log_2\frac{1}{8} =-8×\frac{1}{8}log_2\frac{1}{8}=3bits H(X)=i=1881log281=8×81log281=3bits
也就是说,为了把 X 的值传递给接收者,需要传输一个 3 比特的消息

【例2】设有一个随机变量X 有8 种可能的状态 { a , b , c , d , e , f , g , h } \{a,b,c,d,e,f,g,h\} {a,b,c,d,e,f,g,h},每个状态各自的概率为 { 1 2 , 1 4 , 1 8 , 1 16 , 1 64 , 1 64 , 1 64 , 1 64 } \{\frac{1}{2},\frac{1}{4},\frac{1}{8},\frac{1}{16},\frac{1}{64},\frac{1}{64},\frac{1}{64},\frac{1}{64}\} {21,41,81,161,641,641,641,641} ,这种情况下该随机变量的熵为:
H ( X ) = − 1 2 l o g 2 1 2 − 1 4 l o g 2 1 4 − 1 8 l o g 2 1 8 − 1 16 l o g 2 1 16 − 4 × 1 64 l o g 2 1 64 } = 2 b i t s H(X)=-\frac{1}{2}log_2\frac{1}{2} -\frac{1}{4}log_2\frac{1}{4} -\frac{1}{8}log_2\frac{1}{8} -\frac{1}{16}log_2\frac{1}{16} -4×\frac{1}{64}log_2\frac{1}{64} \}=2bits H(X)=21log22141log24181log281161log21614×641log2641}=2bits
也就是说,随机变量非均匀分布时的熵,要比随机变量均匀分布时的熵小

信源符号码字的平均长度就与随机变量的熵相等,熵是编码所需比特数的下限

信息量

信息量是指从N个相等的可能事件中选出一个事件所需的信息度量或含量。假设 N 的大小为 2 的整次幂(比如 N = 2 n N=2^n N=2n ),则信息量可表示为:
I ( x ) = l o g 2 N = − l o g 2 1 N = − l o g 2 P ( x ) I(x)=log_2N=-log_2\frac{1}{N}=-log_2P(x) I(x)=log2N=log2N1=log2P(x)
每个信源符号的信息量实质上反映的是该信源符号的编码长度

变长编码

费诺码

费诺编码方法认为:在数字形式的码字中的 0 和 1 是相互独立的,因而其出现的概率也应是相等的(为0.5或接近 0.5),这样就可确保传输的每一位码含有 1 比特的信息量

假设输入的离散信源符号集为 X = { x 0 , x 1 , … , x n } X=\{x_0,x_1,…,x_n\} X={x0,x1,,xn},其出现概率为 P ( x i ) P(x_i) P(xi),欲求的费诺码为 W = { w 0 , w 1 , … , w n } W=\{w_0,w_1,…,w_n\} W={w0,w1,,wn},则费诺码编码方法的步骤为:

  1. 把输入的信源符号和其出现的概率按概率值的非递增顺序从上到下依次并列排列
  2. 按概率之和相等或相近的原则把 X 分成两组,并给上面或概率之和较大的组赋值 1,给下面或概率之和较小的组赋值 0
  3. 再按概率之和相等或相近的原则把现有的组分成两组,并给上面或概率之和较大的组赋值 1,给下面或概率之和较小的组赋值 0
  4. 重复 3 的分组和赋值过程,直至每个组只有一个符号为止
  5. 把对每个符号所赋的值依次排列,就可得到信源符号集 X 的费诺码

【例】设有信源符号集 X = { x 1 , x 2 , … , x 8 } X=\{x_1,x_2,…,x_8\} X={x1,x2,,x8},其概率分布为 P ( x 1 ) = 0.25 P(x_1)=0.25 P(x1)=0.25 P ( x 2 ) = 0.125 P(x_2)=0.125 P(x2)=0.125 P ( x 3 ) = 0.0625 P(x_3)=0.0625 P(x3)=0.0625 P ( x 4 ) = 0.25 P(x_4)=0.25 P(x4)=0.25 P ( x 5 ) = 0.0625 P(x_5)=0.0625 P(x5)=0.0625 P ( x 6 ) = 0.125 P(x_6)=0.125 P(x6)=0.125 P ( x 7 ) = 0.0625 P(x_7)=0.0625 P(x7)=0.0625 P ( x 8 ) = 0.0625 P(x_8)=0.0625 P(x8)=0.0625,求其费诺码 W = { w 1 , w 2 , w 3 , w 4 , w 5 , w 6 , w 7 , w 8 } W=\{w_1,w_2,w_3,w_4,w_5,w_6,w_7,w_8\} W={w1,w2,w3,w4,w5,w6,w7,w8}

【解】由题意可得:
P ( x 1 ) = 0.25 = 1 4 P(x_1)=0.25=\frac{1}{4} P(x1)=0.25=41 P ( x 2 ) = 0.125 = 1 8 P(x_2)=0.125=\frac{1}{8} P(x2)=0.125=81
P ( x 3 ) = 0.0625 = 1 16 P(x_3)=0.0625=\frac{1}{16} P(x3)=0.0625=161 P ( x 4 ) = 0.25 = 1 4 P(x_4)=0.25=\frac{1}{4} P(x4)=0.25=41
P ( x 7 ) = 0.0625 = 1 16 P(x_7)=0.0625=\frac{1}{16} P(x7)=0.0625=161 P ( x 6 ) = 0.125 = 1 8 P(x_6)=0.125=\frac{1}{8} P(x6)=0.125=81
P ( x 7 ) = 0.0625 = 1 16 P(x_7)=0.0625=\frac{1}{16} P(x7)=0.0625=161 P ( x 8 ) = 0.0625 = 1 16 P(x_8)=0.0625=\frac{1}{16} P(x8)=0.0625=161

在这里插入图片描述

平均码字长度:
L ‾ = = ∑ i = 1 8 P ( x i ) ⋅ l ( x i ) = 1 4 × 2 + 1 4 × 2 + 1 8 × 3 + 1 8 × 3 + 1 16 × 4 + 1 16 × 4 + 1 16 × 4 + 1 16 × 4 = 11 4 ( b i t ) \begin{align} \overline{L} & = =\displaystyle\sum^8_{i=1}P(x_i)·l(x_i) \\ & = \frac{1}{4}×2+\frac{1}{4}×2+\frac{1}{8}×3+\frac{1}{8}×3+\frac{1}{16}×4+\frac{1}{16}×4+\frac{1}{16}×4+\frac{1}{16}×4 \\ & = \frac{11}{4} (bit) \end{align} L==i=18P(xi)l(xi)=41×2+41×2+81×3+81×3+161×4+161×4+161×4+161×4=411(bit)

霍夫曼编码

假设输入的离散信源符号集为 X = { x 0 , x 1 , … , x n } X=\{x_0,x_1,…,x_n\} X={x0,x1,,xn},其出现概率为 P ( x i ) P(x_i) P(xi),欲求的费诺码为 W = { w 0 , w 1 , … , w n } W=\{w_0,w_1,…,w_n\} W={w0,w1,,wn},则霍夫曼编码方法的步骤为:

  1. 统计信源(比如一幅图像)中的信源符号及每个信源符号出现的概率
    设经统计有 n 个信源符号 x i x_i xi(i=0, …,n),其出现概率为 P ( x i ) P(x_i) P(xi)
  2. 把把信源符号 x i x_i xi 和其概率 P ( x i ) P(x_i) P(xi) ,依序按概率值的递减顺序从上到下依次排列
  3. 把最末两个具有最小概率值的信源符号的概率值合并相加得到新的概率值
  4. 给最末两个具有最小概率值的信源符号的上面的信源符号编码“0”,给下面的信源符号编码“1”
  5. 如果最末两个信源符号的概率值合并相加后为 1.0,则转 7;否则继续下一步
  6. 把合并相加得到的新概率值与其余概率值按递减顺序从上到下依次排列,并转 3
  7. 寻找每一个信源符号到概率为 1.0 处的路径,并依次记录路径上的 “1” 和 “0” ,即可得到每个信源符号对应的二进制符号序列
  8. 逆序逐位地写出每个信源符号对应的二进制符号序列,即可得到每个信源符号的霍夫曼编码

【例】设有信源符号集 X = { x 1 , x 2 , … , x 6 } X=\{x_1,x_2,…,x_6\} X={x1,x2,,x6},其概率分布为 P ( x 1 ) = 0.1 P(x_1)=0.1 P(x1)=0.1 P ( x 2 ) = 0.3 P(x_2)=0.3 P(x2)=0.3 P ( x 3 ) = 0.1 P(x_3)=0.1 P(x3)=0.1 P ( x 4 ) = 0.4 P(x_4)=0.4 P(x4)=0.4 P ( x 5 ) = 0.04 P(x_5)=0.04 P(x5)=0.04 P ( x 6 ) = 0.06 P(x_6)=0.06 P(x6)=0.06,求其霍夫曼码 W = { w 1 , w 2 , w 3 , w 4 , w 5 , w 6 } W=\{w_1,w_2,w_3,w_4,w_5,w_6\} W={w1,w2,w3,w4,w5,w6}

在这里插入图片描述

依据步骤 7 ,可得信源符号及其对应的二进制符号序列为:
{ x 1 , x 2 , x 3 , x 4 , x 5 , x 6 } \{x_1,x_2,x_3,x_4,x_5,x_6\} {x1,x2,x3,x4,x5,x6} ➡️ {110,00,0010,1,11010,01010}

根据步骤 8 ,将上述二进制符号序列逆序排列,即可得到霍夫曼编码为:
{011,00,0100,1,01011,01010}

平均码字长度:
L ‾ = ∑ i = 1 6 P ( x i ) ⋅ l ( x i ) = 0.1 × 3 + 0.3 × 2 + 0.1 × 4 + 0.4 × 1 + 0.04 × 5 + 0.06 × 5 = 2.2 ( b i t ) \begin{align} \overline{L} & =\displaystyle\sum^6_{i=1}P(x_i)·l(x_i) \\ & = 0.1×3+0.3×2+0.1×4+0.4×1+0.04×5+0.06×5 \\ & = 2.2 (bit) \end{align} L=i=16P(xi)l(xi)=0.1×3+0.3×2+0.1×4+0.4×1+0.04×5+0.06×5=2.2(bit)
霍夫曼编码的优点

  • 当对独立信源符号进行编码时,霍夫曼编码可对每个信源符号产生可能是最少数量(最短)码元的码字
  • 霍夫曼编码是所有变长编码中平均码长最短的。如果所有信源符号的概率都是2的指数,霍夫曼编码的平均长度将达到最低限,即信源的熵
  • 对于二进制的霍夫曼编码,平均码字的平均长度满足关系: H < L ‾ < H + 1 H<\overline{L}<H+1 H<L<H+1

位平面编码

所谓位平面编码,就是将一幅灰度图像或彩色图像分解为多幅二值图像,然后对二值图像应用二值图像编码方法,以达到对多值图像编码的目的

位平面分解:对于一幅 N×N 的灰度图像,若每个像素用 m 位表示,就可以从每个像素的二进制表示中取出相同位置上的一位,这样就形成了一幅 N×N 的二值图像,称该二值图像为原灰度图像的一个位平面

【举例】对于一幅 256 灰度级的图像来说,每个像素用一个 8 位的字节表示,该图像就可以分解成 8 个位平面,平面 0 由原图像中像素的最低位组成,平面 1 由原图像中像素的此低位组成,… ,平面 7 由原图像中像素的最高位组成

在这里插入图片描述

在这里插入图片描述

格雷码

多数图像中的大多数相邻像素值具有渐变的特征,但若采用二进制码进行位平面分解,就会导致各位平面中相关性的减小
比如:若灰度图像中的两个相邻像素是127和128,它们显然比较接近,但其二进制编码却分别为:0 1 1 1 1 1 1 1 和 1 0 0 0 0 0 0 0
灰度图像中相邻像素间的很小变化,却引起了所有位平面值的突变,从而降低了位平面图像的相关性,也即降低了位平面图像的压缩效率

由于两个相邻值的格雷码之间只有一位是不同的,这样就可保持相邻像素间较强的相关性,所以一般采用格雷码(Gray)进行位平面分解编码
格雷码进行位平面分解编码的思想:如果用一个 m 位的灰度编码 g m − 1 … g 2 g 1 g 0 g_{m-1}…g_2g_1g_0 gm1g2g1g0 表示图像,那么图像中这个 m 位的灰度编码 g m − 1 … g 2 g 1 g 0 g_{m-1}…g_2g_1g_0 gm1g2g1g0 的所有 g i g_i gi 就组成了第 i 个位平面二值图像

在这里插入图片描述

【举例】

在这里插入图片描述

相关文章:

Chapter07_图像压缩编码

文章目录 图像压缩编码图像压缩编码基础图像压缩的基本概念信息相关信息冗余信源编码及其分类 图像编码模型信源编码器模型信源解码器模型 数字图像的信息熵信源符号码字平均长度信息熵信息量 变长编码费诺码霍夫曼编码 位平面编码格雷码 图像压缩编码 数字图像的压缩是指在满…...

网络安全之前端学习(css终章)

如大家所见&#xff0c;今天的文章就是css的最后一篇文章。那么话不多说&#xff0c;我们开始吧。本章内容比较杂&#xff0c;就是补充之前几章没讲到的。 关系选择器 之前我们讲到了很多选择器&#xff0c;这里补充一个关系选择器。 1.1后代选择器 后代选择器&#xff0c;…...

多线程代码案例 - 2

阻塞队列 阻塞队列&#xff0c;我们熟悉的概念是队列&#xff0c;即一种先进先出的数据结构。阻塞队列&#xff0c;就是基于普通队列做出的扩展。 特点 1. 线程安全的 2. 具有阻塞特性 &#xff08;a&#xff09;如果针对一个已经满了的队列进行入队列&#xff0c;此时入队操…...

Qt实现鼠标右键弹出弹窗退出

Qt鼠标右键弹出弹窗退出 1、鼠标右键实现1.1 重写鼠标点击事件1.2 添加头文件1.3 添加定义2、添加菜单2.1添加菜单头文件2.2创建菜单对象2.3 显示菜单 3、添加动作3.1添加动作资源文件3.2 添加头文件3.3 创建退出动作对象3.4菜单添加动作对象 4、在当前鼠标位置显示菜单4.1当前…...

AI绘画中的LoRa是什么?

Lora是一个多义词&#xff0c;根据不同的上下文可以指代多种事物。以下将详细介绍几种主要的含义&#xff1a; LoRa技术 LoRa&#xff08;Long Range Radio&#xff09;是一种低功耗广域网&#xff08;LPWAN&#xff09;无线通信技术&#xff0c;以其远距离、低功耗和低成本的特…...

LaTeX、KaTeX、Markdown 的用法

文章目录 1. LaTeX 用法概述1.1 LaTeX简介1.2 优点与应用场景2. LaTeX 基础语法2.1 文档结构2.2 文本格式化2.3 数学公式3. KaTeX 用法3.1 KaTeX简介3.2 基本使用方法3.2.1 引入KaTeX3.2.2 渲染数学公式3.2.3 自定义配置3.3 与LaTeX的兼容性4. Markdown 用法4.1 Markdown简介4.…...

Python 如何高效实现 PDF 内容差异对比

Python 如何高效实现 PDF 内容差异对比 1. 安装 PyMuPDF 库2. 获取 PDF 内容通过文件路径获取通过 URL 获取 3. 提取 PDF 每页信息4. 内容对比metadata 差异文本对比可视化对比 5. 提升对比效率通过哈希值快速判断页面是否相同早停机制多进程机制 6. 其他 最近有接触到 PDF 内容…...

JJJ:generic netlink例程分析

接嵌入式毕设、课设辅导、技术咨询&#xff0c;欢迎私信 完整代码&#xff1a;github代码仓链接 若想要和指定的generic netlink family通信&#xff0c;如: 994 static struct genl_family genl_ctrl __ro_after_init { // generic netlink子协议995 .module THIS_MODU…...

3D图像重建中Bundle Adjustment的推导与实现

介绍 捆集调整(Bundle Adjustment),也称为光束平差法,是一种利用来自多台相机的图像数据同时优化相机位置和姿态以及 3D 点位置的技术。该技术历史相当悠久,于 1958 年由 DC Brown1 首次提出。 最初这是美国空军正在进行的从航拍照片中恢复环境的研究,随着视觉SLAM和Sf…...

【代码模板】C语言如何修改文件权限?读写执行权限对应值是多少?(chmod(“./a.out“, 0741);bit 2 1 0表示 读 写 执行)

#include "stdio.h" #include "unistd.h"int main(int argc, char *argv[]) {if (chmod("./a.out", 0741) ! 0) {perror("Failed to set exec permission");return -1;}return 1; }0741中0是8进制&#xff0c;7是 0111&#xff0c; 4是…...

新版pycharm如何实现debug调试需要参数的python文件

在最顶上有这个选项 把鼠标移上去 点击号 选择python 具体长这样 名字随便取 script选择你要调试的python文件 脚本形参填入参数&#xff0c;如&#xff1a;--arg1 value1 --arg2 value2 点击应用确定 最后给文件打上断点&#xff0c;再点击调试按键&#xff0c;就可以调试了…...

赚钱模拟器-百宝库v0.1.1

#include<bits/stdc.h> #include<windows.h> using namespace std; int n,i,j; void welcome(); void zhuye(); void GAME(); int main(){welcome();zhuye();return 0; }void welcome(){cout<<"欢迎您使用更多资源-百宝库v0.1.1"<<endl;sys…...

实战打靶集锦-38-inclusiveness

文章目录 1. 主机发现2. 端口扫描&服务枚举3. 服务探查4.系统提权 靶机地址&#xff1a;https://download.vulnhub.com/inclusiveness/Inclusiveness.ova 1. 主机发现 目前只知道目标靶机在192.168.56.xx网段&#xff0c;通过如下的命令&#xff0c;看看这个网段上在线的主…...

01人工智能基础入门

一、AI应用场景和发展历程 1.1行业应用 1、deepdream图像生成、yolo目标检测 2、知识图谱、画风迁移 3、语音识别、计算机视觉 4、用户画像 5、百度人工智能布局 1.2发展历程 人工智能的发展经历了 3 个阶段&#xff1a; 1980年代是正式成形期&#xff0c;尚不具备影响力。 …...

SortedSet结构之用户积分实时榜单实战

Redis 中的SortedSet结构非常适合用于实现实时榜单的场景&#xff0c;它根据成员的分数自动进行排序&#xff0c;支持高效的添加、更新和查询操作。 SortedSet实时榜单的一些典型应用场景&#xff1a; 游戏中的玩家排行榜&#xff1a;在多人在线游戏中&#xff0c;使用 Sorte…...

C++_类和对象(上)

【本节目标】 面向过程和面向对象初步认识类的引入类的定义类的访问限定符及封装类的作用域.类的实例化类的对象大小的计算类成员函数的this指针 1. 面向过程和面向对象初步认识 C语言是面向过程的&#xff0c;关注的是过程&#xff0c;分析出求解问题的步骤&#xff0c;通过…...

vllm作为服务启动,无需额外编写sh文件,一步到位【Ubuntu】

看到网上有的vllm写法&#xff0c;需要额外建立一个.sh文件&#xff0c;还是不够简捷。这里提供一种直接编写service文件一步到位的写法&#xff1a; vi /etc/systemd/system/vllm.service [Unit] DescriptionvLLM Service Afternetwork.target[Service] Typesimple Userroot…...

Mathematics | Branch

注&#xff1a;本文为“遇见数学”翻译的 “数学分支概览” 两篇文章合辑。 数学世界的版图&#xff1a;主要分支概览&#xff08;上&#xff09; 原创 遇见数学 2025 年 04 月 03 日 12:02 河南 数学的分支&#xff08;Areas of Mathematics&#xff09; 在文艺复兴之前&am…...

8.5/Q1,Charls最新文章解读

文章题目&#xff1a;Associations of estimated glucose disposal rate with frailty progression: results from two prospective cohorts DOI&#xff1a;10.1186/s12933-025-02650-7 中文标题&#xff1a;估计葡萄糖处理率与虚弱进展的关系&#xff1a;两个前瞻性队列的结果…...

PCL学习(5)随机采样一致性算法RANSAC

一、RANSAC概念及作用 1.1 基本概念 RANSAC是一种鲁棒的参数估计方法&#xff0c;用于从包含大量异常值的数据中拟合数学模型。其核心思想是通过随机采样和迭代验证&#xff0c;找到最优的模型参数&#xff0c;避免异常值的干扰。 1.2 核心思想 随机采样&#xff1a;每次从数…...

app逆向专题一:如何下载app

app逆向专题一&#xff1a;如何下载app 一、打开豌豆荚官网 一、打开豌豆荚官网 打开豌豆荚官网豌豆荚&#xff0c;在右上角搜索框中输入要下载的app名称 依次点击搜索–查看–普通下载&#xff0c;即可将apk文件下载到本地电脑上。...

将 DataFrame 中某一列的列表拆分成多个独立的列的方式

要将 DataFrame 中某一列的列表拆分成多个独立的列&#xff0c;可以使用以下方法&#xff0c;具体取决于数据结构和需求&#xff1a; 场景示例 假设 DataFrame 中 genres 列存储的是列表&#xff08;如 [drama, action]&#xff09;&#xff0c;目标是将每个列表元素拆分成多列…...

VUE+SPRINGBOOT+语音技术实现智能语音歌曲管理系统

语音控制歌曲的播放、暂停、增删改查 <template><div class"Music-container"><div style"margin: 10px 0"><!--检索部分--><el-input style"width: 200px;" placeholder"请输入歌曲名称"v-model"sen…...

安卓开发工程师-自定义 View

1. 如何创建一个简单的自定义 View&#xff1f; 创建自定义 View 的基本步骤如下&#xff1a; 继承 View 或其子类&#xff1a;自定义 View 可以继承自 View 或其他更具体的视图类&#xff08;如 ImageView、Button 等&#xff09;。重写构造方法&#xff1a;通常需要重写三个…...

Vue中权限控制的方案

文章目录 源码&#xff1a;一、页面级1.1、路由守卫1.2、动态路由 二、按钮级别2.1、通过v-if来判断2.2、通过组件包裹的方式来判断2.3、通过自定义指令的方式 三、接口级别 源码&#xff1a; https://gitee.com/liu-qiang-yyds/sysPermission 一、页面级 1.1、路由守卫 前端…...

磁盘分析工具合集:告别C盘焦虑!

今天李师傅带大家盘点五款硬盘空间分析利器&#xff0c;帮你精准定位那些"吃空间"的元凶&#xff0c;让C盘告别臃肿烦恼&#xff01; 一、WizTree 这款NTFS磁盘的"透视眼"堪称效率典范。它通过直接读取硬盘主文件表(MFT)实现秒级扫描&#xff0c;1TB机械…...

硬件学习之器件篇-蜂鸣器

根据工作原理的不同&#xff0c;可以分为电磁式蜂鸣器和压电式蜂鸣器。 1、电磁式蜂鸣器 电磁式蜂鸣器根据内部是否有震荡源&#xff0c;又可以分为有源电磁式蜂鸣器和无源电磁式蜂鸣器。 1.1 外观区别 有源电磁式蜂鸣器从底部看是&#xff0c;是黑胶密封的。 无源电磁式蜂…...

紫檀博物馆一游与软件开发

今天去逛了中国紫檀博物馆&#xff0c;里边很多层展品&#xff0c;也有一些清代的古物&#xff0c;檀木&#xff0c;黄花梨木家具和各种摆件&#xff0c;馆主陈丽华女士也是发心复原、保留和弘扬中国的传统文化&#xff0c;和西游记唐僧扮演者迟成瑞先生一家。 每一件展品都精…...

Cribl 新建Datatype

Cribl 数据dataset 有个很重要的就是datatype, 下面来新建一下: 先看一下原来的datatype : 再点击Add Datatype: Rule...

开源 LLM 应用开发平台 Dify 全栈部署指南(Docker Compose 方案)

开源 LLM 应用开发平台 Dify 全栈部署指南&#xff08;Docker Compose 方案&#xff09; 一、部署环境要求与前置检查 1.1 硬件最低配置 组件要求CPU双核及以上内存4GB 及以上磁盘空间20GB 可用空间 1.2 系统兼容性验证 ✅ 官方支持系统&#xff1a; Ubuntu 20.04/22.04 L…...

医药档案区块链系统

1. 医生用户模块​​ ​​目标用户​​&#xff1a;医护人员 ​​核心功能​​&#xff1a; ​​检索档案​​&#xff1a;通过关键词或筛选条件快速定位患者健康档案。​​请求授权​​&#xff1a;向个人用户发起档案访问权限申请&#xff0c;需经对方确认。​​查看档案​…...

Redis常见命令

(一)常见命令① 一、数据结构 二、通用命令 ①KEYS查询语句 pattern代表模板,有点像匹配表达式(不是正则),是redis的一种内置表达式,可以在里面使用通配符 底层存在一种模糊查询机制,效率并不高。当redis的数据量达到一定规模时(数百万上千万甚至更多),使用这种模糊查询机制会…...

Qt的window注册表读写以及删除

Qt的window注册表读写以及删除 1. 使用 QSettings&#xff08;Qt推荐方式&#xff09;基本操作关键点限制 2. 调用Windows原生API示例&#xff1a;创建/读取键值常用API注意事项 3. 高级场景(1) 递归删除键(2) 注册表权限修改 4. 安全性建议总结其他QT文章推荐 在Qt中操作Windo…...

纯css实现环形进度条

需要在中实现一个定制化的环形进度条&#xff0c;最终效果如图&#xff1a; 使用代码 <divclass"circular-progress":style"{--progress: nextProgress,--color: endSliderColor,--size: isFull ? 60rpx : 90rpx,}"><div class"inner-conte…...

20250405周赛-S

链接 A. 日历 我的&#xff1a; #include<bits/stdc.h> using namespace std; int n,d[105],ans; bool check(int x,int y){if(x<10){if(y<10){return xy;}else{return xy%10&&xy/10;}}else{if(y<10){return yx%10&&yx/10;}else{return y/10…...

某碰瓷国赛美赛,号称第三赛事的数模竞赛

首先我非常不能理解的就是怎么好意思自称第三赛事的呢&#xff1f;下面我们进行一个简单讨论&#xff0c;当然这里不对国赛和美赛进行讨论。首先我们来明确一点&#xff0c;比赛的含金量由什么来定&#xff1f;这个可能大家的评价指标可能不唯一&#xff0c;我通过DeepSeek选取…...

希象传屏下载

2025年4月5日&#xff0c;11~22℃ 免费软件&#xff0c;功能&#xff1a;手机、个人笔记本和智慧黑板可以双向控制。要求在同一网络下或者同一WiFi下。 目的&#xff1a;自己下载的时候比较方便。 1、希沃易官网 2、如何下载&#xff1f; 被投屏&#xff1a;接收端&#xff1…...

解决 PDF 难题:批量处理、文档清理与自由拆分合并

软件介绍 在日常办公与学习中&#xff0c;处理 PDF 文件常常让人头疼不已&#xff0c;不过别担心&#xff0c;今天有一款堪称神器的国产老牌 PDF 工具要分享给大家。它就是 PDF 补丁丁&#xff0c;凭借其强大功能&#xff0c;为大家排忧解难。 界面体验 初次打开 PDF 补丁丁&…...

SQL Server 2022 数据同步到 Elasticsearch 思考

公司的老项目了&#xff0c;采用的是sqlserver 2022作为数据卡做的&#xff0c;但是产品对接客户&#xff0c;发现对搜索的要求很高&#xff0c;尤其是全文检索&#xff0c;考虑到ES采用倒排所以效率上的优势和整体开发的成本&#xff0c;大佬们商量之后&#xff0c;果断的采用…...

基于Spark的哔哩哔哩舆情数据分析系统

【Spark】基于Spark的哔哩哔哩舆情数据分析系统 &#xff08;完整系统源码开发笔记详细部署教程&#xff09;✅ 目录 一、项目简介二、项目界面展示三、项目视频展示 一、项目简介 本项目基于Python和Django框架进行开发&#xff0c;为了便于广大用户针对舆情进行个性化分析处…...

分布式事务解决方案全解析:从经典模式到现代实践

前言 在分布式系统中&#xff0c;数据一致性是一个核心问题。随着微服务架构的普及&#xff0c;跨服务、跨数据库的操作变得越来越普遍&#xff0c;如何保证这些操作的原子性、一致性、隔离性和持久性&#xff08;ACID&#xff09;成为了一个极具挑战性的任务。本文将全面介绍…...

迈向未来:数字化工厂管理如何重塑生产力

迈向未来:数字化工厂管理如何重塑生产力 随着工业4.0的浪潮席卷全球,“数字化工厂管理”成为制造业转型的关键一步。从传统生产模式到数据驱动的智能制造,企业在追求生产效率、质量与灵活性方面实现了飞跃式发展。然而,实施数字化管理不仅仅是技术问题,更关乎流程优化、数…...

LeetCode 1863.找出所有子集的异或总和再求和

题解 根据上述图可以根据二进制运算获取所有的子集&#xff0c;但是可以使用二进制获取所有子集需要有题目的这一句话才能够使用注意&#xff1a;在本题中&#xff0c;元素相同的不同子集应多次计数。 也就是对于{2,2,3,4,5}的子集不会简化成{2,3,4,5} public static int sub…...

蓝桥云客---蓝桥速算

3.蓝桥速算【算法赛】 - 蓝桥云课 问题描述 蓝桥杯大赛最近新增了一项娱乐比赛——口算大赛&#xff0c;目的是测试选手的口算能力。 比赛规则如下&#xff1a; 初始给定一个长度为 N 的数组 A&#xff0c;其中第 i 个数字为 Ai​。随后数组会被隐藏&#xff0c;并进行 Q 次…...

Kafka 概念

&#x1f300; Kafka 是什么&#xff1f; Kafka 是一个分布式流处理平台&#xff0c;可以用来&#xff1a; &#x1f69a; 高效地收集、传输、存储、处理 实时数据流。 它最初由 LinkedIn 开发&#xff0c;用于解决海量日志处理的问题&#xff0c;后来开源给 Apache&#xff0…...

双向链表增删改查的模拟实现

本章目标 0.双向链表的基本结构 1.双向链表的初始化 2.头插尾插 3.头删尾删 4.查找与打印 5.在指定位置之前插入数据/在指定位置之后插入数据 6.在指定位置之前删除数据/在指定位置之后删除数据 7.销毁链表 0.双向链表的基本结构 本章所实现的双向链表是双向循环带头链表,是…...

配置ASP.NET Core+NLog配置日志示例

以下是一个精简且实用的 NLog 配置文件示例,适用于 ASP.NET Core 项目,包含文件日志、控制台日志和自动归档功能: NLog.config 示例‌ (保存到项目根目录) xml Copy Code <?xml version="1.0" encoding="utf-8" ?> <nlog xmlns="http:…...

Roo Code使用MCP服务(大模型上下文协议)

MCP概念火爆&#xff0c;但是理解起来有点难度&#xff0c;使用起来也有点难度。 启用MCP RooCode直接支持使用MCP服务&#xff0c;甚至可以帮助写MCP&#xff0c;为我们提供了很大的方便。单击 Roo Code 窗格顶部导航栏中的类似三个插座的图标&#xff0c;显示如下MCP的配置…...

【项目管理】第一部分 信息技术 1/2

相关文档&#xff0c;希望互相学习&#xff0c;共同进步 风123456789&#xff5e;-CSDN博客 概要 知识点&#xff1a; 现代化基础设施、数字经济、工业互联网、车联网、智能制造、智慧城市、数字政府、5G、常用数据库类型、数据仓库、信息安全、网络安全态势感知、物联网、大数…...

《UNIX网络编程卷1:套接字联网API》第6章 IO复用:select和poll函数

《UNIX网络编程卷1&#xff1a;套接字联网API》第6章 I/O复用&#xff1a;select和poll函数 6.1 I/O复用的核心价值与适用场景 I/O复用是高并发网络编程的基石&#xff0c;允许单个进程/线程同时监控多个文件描述符&#xff08;套接字&#xff09;的状态变化&#xff0c;从而高…...