CN116260975A - 一种基于cuda的视频压缩方法、设备及存储介质 - Google Patents

一种基于cuda的视频压缩方法、设备及存储介质 Download PDF

Info

Publication number
CN116260975A
CN116260975A CN202310062346.3A CN202310062346A CN116260975A CN 116260975 A CN116260975 A CN 116260975A CN 202310062346 A CN202310062346 A CN 202310062346A CN 116260975 A CN116260975 A CN 116260975A
Authority
CN
China
Prior art keywords
ycbcr
rgb
sample format
format
cuda
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Granted
Application number
CN202310062346.3A
Other languages
English (en)
Other versions
CN116260975B (zh
Inventor
王文佳
于好贤
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Chengdu Zengzi Technology Co ltd
Original Assignee
Chengdu Zengzi Technology Co ltd
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Chengdu Zengzi Technology Co ltd filed Critical Chengdu Zengzi Technology Co ltd
Priority to CN202310062346.3A priority Critical patent/CN116260975B/zh
Publication of CN116260975A publication Critical patent/CN116260975A/zh
Application granted granted Critical
Publication of CN116260975B publication Critical patent/CN116260975B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04NPICTORIAL COMMUNICATION, e.g. TELEVISION
    • H04N19/00Methods or arrangements for coding, decoding, compressing or decompressing digital video signals
    • H04N19/42Methods or arrangements for coding, decoding, compressing or decompressing digital video signals characterised by implementation details or hardware specially adapted for video compression or decompression, e.g. dedicated software implementation
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04NPICTORIAL COMMUNICATION, e.g. TELEVISION
    • H04N19/00Methods or arrangements for coding, decoding, compressing or decompressing digital video signals
    • H04N19/10Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using adaptive coding
    • H04N19/169Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using adaptive coding characterised by the coding unit, i.e. the structural portion or semantic portion of the video signal being the object or the subject of the adaptive coding
    • H04N19/182Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using adaptive coding characterised by the coding unit, i.e. the structural portion or semantic portion of the video signal being the object or the subject of the adaptive coding the unit being a pixel
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04NPICTORIAL COMMUNICATION, e.g. TELEVISION
    • H04N19/00Methods or arrangements for coding, decoding, compressing or decompressing digital video signals
    • H04N19/40Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using video transcoding, i.e. partial or full decoding of a coded input stream followed by re-encoding of the decoded output stream
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04NPICTORIAL COMMUNICATION, e.g. TELEVISION
    • H04N19/00Methods or arrangements for coding, decoding, compressing or decompressing digital video signals
    • H04N19/42Methods or arrangements for coding, decoding, compressing or decompressing digital video signals characterised by implementation details or hardware specially adapted for video compression or decompression, e.g. dedicated software implementation
    • H04N19/423Methods or arrangements for coding, decoding, compressing or decompressing digital video signals characterised by implementation details or hardware specially adapted for video compression or decompression, e.g. dedicated software implementation characterised by memory arrangements
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04NPICTORIAL COMMUNICATION, e.g. TELEVISION
    • H04N19/00Methods or arrangements for coding, decoding, compressing or decompressing digital video signals
    • H04N19/42Methods or arrangements for coding, decoding, compressing or decompressing digital video signals characterised by implementation details or hardware specially adapted for video compression or decompression, e.g. dedicated software implementation
    • H04N19/436Methods or arrangements for coding, decoding, compressing or decompressing digital video signals characterised by implementation details or hardware specially adapted for video compression or decompression, e.g. dedicated software implementation using parallelised computational arrangements

Landscapes

  • Engineering & Computer Science (AREA)
  • Multimedia (AREA)
  • Signal Processing (AREA)
  • Computing Systems (AREA)
  • Theoretical Computer Science (AREA)
  • Color Television Systems (AREA)

Abstract

本发明公开了一种基于CUDA的视频压缩方法、设备及存储介质,属于视频处理技术领域。所述视频压缩方法包括:定义RGB转4:2:0采样格式的YCbCr设备函数、RGB转4:2:0采样格式的YCbCr核函数和RGB转4:2:0采样格式的YCbCr主机函数;将第三参数输入RGB转4:2:0采样格式的YCbCr主机函数;RGB转4:2:0采样格式的YCbCr主机函数根据指定的4:2:0采样格式的YCbCr图像的宽高计算出调用RGB转4:2:0采样格式的YCbCr核函数需要分配的网格和块数量及结构,并调用RGB转4:2:0采样格式的YCbCr核函数进行视频压缩。本发明提供了一种基于CUDA的视频压缩方法。

Description

一种基于CUDA的视频压缩方法、设备及存储介质
技术领域
本发明属于视频处理技术领域,特别是涉及一种基于CUDA的视频压缩方法、设备及存储介质。
背景技术
在当今的视频直播、云渲染等领域,只要涉及到需要将视频数据进行网络传输到另一台设备上,都避不开视频压缩。如今主流图形卡厂商NVIDIA提供的显卡被广泛集成在各个计算机硬件系统中,NVIDIA提供的GPU编程语言CUDA可以借助GPU并行计算的能力,在GPU上处理视频等。目前市面上存在的视频压缩算法为基于HLSL语言实现的视频压缩算法以及其他语言实现的视频压缩算法。
发明内容
本发明的目的在于克服现有技术的不足,提供一种基于CUDA的视频压缩方法、设备及存储介质。
本发明的目的是通过以下技术方案来实现的:
根据本发明的第一方面,一种基于CUDA的视频压缩方法,包括:
定义RGB转4:2:0采样格式的YCbCr设备函数、RGB转4:2:0采样格式的YCbCr核函数和RGB转4:2:0采样格式的YCbCr主机函数;
将第三参数输入RGB转4:2:0采样格式的YCbCr主机函数,所述第三参数包括RGB图像数据数组、4:2:0采样格式的YCbCr图像的宽、4:2:0采样格式的YCbCr图像的高、4:2:0采样格式的YCbCr图像中单行所有像素所占的字节数和4:2:0采样格式的YCbCr图像数据数组;
RGB转4:2:0采样格式的YCbCr主机函数根据指定的4:2:0采样格式的YCbCr图像的宽高计算出调用RGB转4:2:0采样格式的YCbCr核函数需要分配的网格和块数量及结构,并调用RGB转4:2:0采样格式的YCbCr核函数进行视频压缩。
进一步地,所述RGB转4:2:0采样格式的YCbCr设备函数用于将输入的第一参数转换为4:2:0采样格式的YCbCr格式的像素值,所述第一参数包括单个RGB像素值。
进一步地,将输入的第一参数转换为4:2:0采样格式的YCbCr格式的像素值,包括:
使用带伽马矫正的RGB转YCbCr公式,使用Y = 0.257 * R + 0.504 * G + 0.098* B + 16公式计算出Y值;
使用带伽马矫正的RGB转YCbCr公式,使用Cb = -0.148 * R + -0.291 * G +0.439 * B + 128公式计算出Cb值;
使用带伽马矫正的RGB转YCbCr公式,使用Cr = 0.439 * R - 0.368 * G - 0.071* B + 128公式计算出Cr值。
进一步地,所述RGB转4:2:0采样格式的YCbCr核函数的输入为第二参数,RGB转4:2:0采样格式的YCbCr核函数根据当前线程对应位置获取RGB图像对应索引的4个RGB像素,将该4个RGB像素转换为4个Y、1个Cb和1个Cr分量后存储在4:2:0采样格式的YCbCr图像数据数组中,所述第二参数包括4:2:0采样格式的YCbCr图像的宽、4:2:0采样格式的YCbCr图像的高、4:2:0采样格式的YCbCr图像中单行所有像素所占的字节数和4:2:0采样格式的YCbCr图像数据数组。
进一步地,RGB转4:2:0采样格式的YCbCr主机函数根据指定的4:2:0采样格式的YCbCr图像的宽高计算出调用RGB转4:2:0采样格式的YCbCr核函数需要分配的网格和块数量及结构,包括:
创建CUDA像素通道描述信息channelDesc,调用cudaCreateChannelDesc函数,指定像素通道为8通道的RGBA且数值类型为无符号整数类型;
使用CUDA纹理模板类型,定义CUDA全局纹理变量texture<uchar4,cudaTextureType2D, cudaReadModeElementType>rgbImage;
调用cudaBindTextureToArray函数,将rgbImage、RGB图像数据数组和channelDesc传入该函数,绑定RGB图像数据数组到全局纹理变量rgbImage中;
定义块结构变量block,指定其结构为<x:32,y:16>,定义网格结构变量grid,计算出网格结构为<x:(width + (2 * block.x - 1)) / (2 * block.x), y:(height + (2 *block.y - 1)) / (2 * block.y)>。
进一步地,调用RGB转4:2:0采样格式的YCbCr核函数进行视频压缩,包括:
根据CUDA核函数的内置变量计算出当前线程待处理的第1个RGB像素的图像数组索引,得到横向索引x和纵向索引y,CUDA核函数的内置变量包括blockIdx、blockDim、threadIdx;
获取1组转换单元中4个RGB像素的横纵向索引,分别为(x,y)、(x+1,y)、(x,y+1)和(x+1,y+1);
判断当前计算得出的4个RGB中位于右下侧的像素索引(x+1,y+1)是否超出核函数传入参数4:2:0采样格式的YCbCr图像分辨率的宽和高的数值,如果超出则舍弃超出部分;
在全局纹理变量rgbImage中获取4个对应索引的RGB像素值,分别将4个RGB像素值作为参数调用RGB转4:2:0采样格式的YCbCr设备函数,得到4个4:2:0采样格式的YCbCr像素值;
对4个4:2:0采样格式的YCbCr像素中的Cb分量和Cr分量分别求取平均值,得到这一组转换单元中4个4:2:0采样格式的YCbCr像素共用的1个Cb分量和1个Cr分量;
向4:2:0采样格式的YCbCr图像数据数组中存储4个4:2:0采样格式的YCbCr像素的Y分量数值,对应索引分别为(destPitch * y + x)、(destPitch * y + x + 1)、(destPitch * (y + 1) + x)和(destPitch * (y + 1) + (x + 1));
计算CbCr分量在4:2:0采样格式的YCbCr图像数据数组中存储的索引偏移量offset,该值为(destPitch * height);
计算Cb分量在4:2:0采样格式的YCbCr图像数据数组中存储的索引为(offset +destPitch * (y / 2) + x),向4:2:0采样格式的YCbCr图像数据数组中存储Cb分量;
计算Cr分量在4:2:0采样格式的YCbCr图像数据数组中存储的索引为(offset +destPitch * (y / 2) + x + 1),向4:2:0采样格式的YCbCr图像数据数组中存储Cr分量。
根据本发明的第二方面,一种设备,所述设备包括处理器和存储器,所述存储器中存储有至少一条指令、至少一段程序、代码集或指令集,所述至少一条指令、所述至少一段程序、所述代码集或指令集由所述处理器加载并执行以实现如本发明的第一方面所述的方法。
根据本发明的第三方面,一种存储介质,所述存储介质中存储有至少一条指令、至少一段程序、代码集或指令集,所述至少一条指令、所述至少一段程序、所述代码集或指令集由处理器加载并执行以实现如本发明的第一方面所述的方法。
本发明的有益效果是:
(1)本发明提供的基于CUDA的视频压缩方法充分利用GPU并行计算能力,而非在CPU运行,缓解了CPU负载压力;
(2)本发明充分利用CUDA编程模型支持并发线程数量高的特性,将视频压缩流程拆解,为每一组[2x2]的像素开启一个线程进行压缩计算。
附图说明
图1为GPU中线程的结构分布示意图;
图2为4:2:0采样格式的YCbCr格式与RGB的转换对应关系示意图;
图3为本发明中视频压缩方法的一种实施例的流程图。
具体实施方式
下面将结合实施例,对本发明的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域技术人员在没有付出创造性劳动的前提下所获得的所有其他实施例,都属于本发明保护的范围。
参阅图1-图3,本实施例提供了一种基于CUDA的视频压缩方法、设备及存储介质:
关于CUDA:CUDA中有主机(host)和设备(device)两个概念,主机代表CPU及其内存,设备代表GPU及其内存。CUDA语言可以编写在CPU上运行的主机程序以及在GPU上运行的设备程序,且提供了主机与设备通信的方法,使得程序可以利用CUDA实现CPU和GPU的数据交互。
CUDA中还有核函数(__global__)、主机函数(__host__)以及设备函数(__device__)的概念。核函数是在GPU线程中执行的函数,但是可以在CPU中调用。调用时需要分配执行核函数线程数量以及布局,在CUDA中为该核函数分配的每一个线程都会执行核函数,每一个线程按照分配的布局会存在唯一的线程ID,这个ID可以在核函数内部实现中通过内置变量来获得,从而定位当前是位于哪个位置的线程在执行。因此本发明基于CUDA的视频压缩算法与其他编程语言实现的视频压缩算法有着本质的逻辑区别。
关于视频数据:视频数据的常见存在形式为一组图像数据的集合,每一个图像数据可以由线性存储或链式存储的方式存在于内存中。线性存储又可以分为一维线性存储或二维线性存储。如果图像数据是RGB格式、分辨率是(3x3)且采用一维线性存储的情况下,则单个图像数据的集合可以表示为[R1,G1,B1,R2,G2,B2,R3,G3,B3,...,R9,G9,B9]。如果索引为0、1、2、4时分别可以取到R1、G1、B1、G2的数值,则可以在CUDA中根据线程ID计算得到位置,从而求出索引值,获取到对应单元格的像素值进而进行数据压缩。如果图像数据是RGB格式、分辨率是(3x3)且采用二维线性存储的情况下,则单个图像数据的集合可以表示为:
[R1,G1,B1,R2,G2,B2,R3,G3,B3],
[R4,G4,B4,R5,G5,B5,R6,G6,B6],
[R7,G7,B7,R8,G8,B8,R9,G9,B9]
如果索引为[0,0]、[0,8]、[1,0]、[2,0]时分别可以取到R1、B3、R4、R7的数值,则仍可以在CUDA中根据线程ID计算得到位置,获取对应像素值。
关于核函数调用时分配线程数量及布局:一个核函数所启动的所有线程称为一个网格(grid),网格又可以分为很多块(block),每一个块里可以包含多个线程。调用核函数时需要配置<<<grid, block>>>来指定分配的网格数以及每个网格内的块数。如果要处理二维线性存储的图像数据,则可以通过<<<(3,3), (3,1)>>>来指定线程数量及布局。网格结构为(3x3),每个网格内的块结构为(3x1)。则GPU中线程的结构分布如图1所示。每一个块就可以对应一个像素值,一个块内的3个线程就可以分别处理当前像素值的R通道、G通道和B通道。指定线程的布局是灵活的,不同的布局仅是影响核函数执行过程中求取索引的算法逻辑,而不同的线程数量会影响并发的计算总时间以及GPU资源占用。
关于4:2:0采样格式的YCbCr格式: YCbCr颜色空间中的Y表示明亮度,即亮度分量。Cb和Cr为色度分量。Cb表示RGB输入信号蓝色部分与信号亮度值之间的差异,Cr表示RGB输入信号红色部分与信号亮度值之间的差异。4:2:0采样格式的YCbCr格式即在水平和垂直方向上对色度分量进行了2:1的抽样,即每4个Y样本对应1个Cb样本和1个Cr样本。其中色度分量在水平方向和垂直方向的分辨率均是亮度分量的1/2。4:2:0采样格式的YCbCr表示了YCbCr的排列存储顺序,将Y分量单独存放,Cb和Cr分量交错存放。与RGB的转换对应关系如图2所示。
4:2:0采样格式的YCbCr存储格式是将1个RGB像素以及它的右侧相邻、下侧相邻、右下侧相邻这4个RGB像素作为一组计算单元,将每个RGB像素转为YCbCr像素,得到4个Y、4个Cb以及4个Cr,然后对4个Cb求取平均值得出4个Y共用的1个Cb,对4个Cr求取平均值得出4个Y共用的1个Cr。并将Cb和Cr这2个色度分量按一组Y的对应顺序存储在整个Y亮度分量的数组之后。
本发明的第一方面提供了一种基于CUDA的视频压缩方法,如图3所示,所述视频压缩方法包括:
S100.定义RGB转4:2:0采样格式的YCbCr设备函数、RGB转4:2:0采样格式的YCbCr核函数和RGB转4:2:0采样格式的YCbCr主机函数。
在一些实施例中,所述RGB转4:2:0采样格式的YCbCr设备函数的输入参数为第一参数,所述第一参数包括单个RGB像素值,RGB转4:2:0采样格式的YCbCr设备函数用于将输入的第一参数转换为4:2:0采样格式的YCbCr格式的像素值。
具体的,RGB转4:2:0采样格式的YCbCr设备函数将输入的第一参数(单个RGB像素值)转换为4:2:0采样格式的YCbCr格式的像素值,包括:
S110.使用带伽马矫正的RGB转YCbCr公式,使用Y = 0.257 * R + 0.504 * G +0.098 * B + 16公式计算出Y值。
S120.使用带伽马矫正的RGB转YCbCr公式,使用Cb = -0.148 * R + -0.291 * G+ 0.439 * B + 128公式计算出Cb值。
S130.使用带伽马矫正的RGB转YCbCr公式,使用Cr = 0.439 * R - 0.368 * G -0.071 * B + 128公式计算出Cr值。
在一些实施例中,所述RGB转4:2:0采样格式的YCbCr核函数的输入为第二参数,RGB转4:2:0采样格式的YCbCr核函数根据当前线程对应位置获取RGB图像对应索引的4个RGB像素,将该4个RGB像素转换为4个Y、1个Cb和1个Cr分量后存储在4:2:0采样格式的YCbCr图像数据数组中,所述第二参数包括4:2:0采样格式的YCbCr图像的宽width、4:2:0采样格式的YCbCr图像的高height、4:2:0采样格式的YCbCr图像中单行所有像素所占的字节数destPitch和4:2:0采样格式的YCbCr图像数据数组destImage。
S200.将第三参数输入RGB转4:2:0采样格式的YCbCr主机函数,所述第三参数包括RGB图像数据数组、4:2:0采样格式的YCbCr图像的宽、4:2:0采样格式的YCbCr图像的高、4:2:0采样格式的YCbCr图像中单行所有像素所占的字节数和4:2:0采样格式的YCbCr图像数据数组。
在一些实施例中,RGB转4:2:0采样格式的YCbCr主机函数根据指定的4:2:0采样格式的YCbCr图像的宽高计算出调用RGB转4:2:0采样格式的YCbCr核函数需要分配的网格和块数量及结构,包括:
S210.创建CUDA像素通道描述信息channelDesc,调用cudaCreateChannelDesc函数,指定像素通道为8通道的RGBA且数值类型为无符号整数类型。
S220.使用CUDA纹理模板类型,定义CUDA全局纹理变量texture<uchar4,cudaTextureType2D, cudaReadModeElementType>rgbImage。
S230.调用cudaBindTextureToArray函数,将rgbImage、RGB图像数据数组和channelDesc传入该函数,绑定RGB图像数据数组到全局纹理变量rgbImage中,此步骤保证S340可以获取到RGB图像数组中对应索引的像素值。
S240.定义块结构变量block,指定其结构为<x:32,y:16>,定义网格结构变量grid,计算出网格结构为<x:(width + (2 * block.x - 1)) / (2 * block.x), y:(height + (2 * block.y - 1)) / (2 * block.y)>。
按照以上说明的CUDA原理以及转换4:2:0采样格式的YCbCr图像需要的转换单元,每4个像素需要1个线程进行转换计算,所以分配的网格结构中的x和y分别为4:2:0采样格式的YCbCr图像宽和高的一半,且因为进行了第2级分配即每个block中又细分了(32x16)的结构,则需要进行该步计算。将block的结构定义为(32x16),分配大小均为2的整数次幂,可以有效提升GPU计算性能。
S300.RGB转4:2:0采样格式的YCbCr主机函数根据指定的4:2:0采样格式的YCbCr图像的宽高计算出调用RGB转4:2:0采样格式的YCbCr核函数需要分配的网格和块数量及结构,并调用RGB转4:2:0采样格式的YCbCr核函数进行视频压缩;然后调用cudaDeviceSynchronize函数等待RGB转4:2:0采样格式的YCbCr核函数的所有线程计算完毕将计算结果同步,得到压缩后的视频数据。
在一些实施例中,调用RGB转4:2:0采样格式的YCbCr核函数进行视频压缩,包括:
S310.根据CUDA核函数的内置变量计算出当前线程待处理的第1个RGB像素的图像数组索引,得到横向索引x和纵向索引y,CUDA核函数的内置变量包括blockIdx、blockDim、threadIdx。
一个核函数所启动的所有线程称为一个网格(grid),网格又可以分为很多块(block),每一个块里可以包含多个线程(thread)。其中每个块都有唯一的索引变量blockIdx,通过该变量可以得知当前是哪一个块在执行核函数。blockIdx是一个三维变量,其中包含了x、y、z三个子变量。如附图图1所示,block(x, y)即表示blockIdx的值。例如图示中的block(0, 1)表示blockIdx.x=0,blockIdx.y=1。每个块都有块结构变量blockDim,通过该变量可以得知当前块中的线程结构。blockDim是一个三维变量,其中包含了x、y、z三个子变量分别用于表示三个维度的线程个数。如附图图1所示,block(0, 1)中有3个线程,用矩阵的术语描述即1行3列。所以块block(0, 1)的blockDim变量的值为blockDim.x=3,blockDim.y=1。每个线程都有基于当前块的唯一索引变量threadIdx,通过该变量可以得知当前是哪一个线程在执行核函数。threadIdx是一个三维变量,其中包含了x、y、z三个子变量。如附图图1所示,block(1, 1)中有3个线程,其中thread(0)在当前块中位于第1行第1列,所以threadIdx.x=0,threaIdx.y=0。
假如把网格grid一比一对应一张图片,每一个线程thread对应一张图片上对应位置的像素单元。如果当前是block(1, 1)块中的线程thread(1)在执行核函数,从grid整体看,thread(1)位于网格的第2行第5列。此时的blockIdx.x=1,blockIdx.y=1,blockDim.x=3,blockDim.y=1,threadIdx.x=1,threadIdx.y=0。根据blockIdx.x * blockDim.x +threadIdx.x公式可以得出当前线程在整个网格下的行索引,根据blokcIdx.y *blockDim.y + threadIdx.y公式可以得出当前线程在整个网格下的列索引。计算结果为(4,1),即为第2行第5列的索引值。(注:x横向,表示列索引,y纵向,表示行索引。索引值均从0开始计算,如第1行,则该行行索引为0;第2行,该行行索引为1)。
S320.获取1组转换单元中4个RGB像素的横纵向索引,分别为(x,y)、(x+1,y)、(x,y+1)和(x+1,y+1)。
S330.判断当前计算得出的4个RGB中位于右下侧的像素索引(x+1,y+1)是否超出核函数传入参数4:2:0采样格式的YCbCr图像分辨率的宽和高的数值,如果超出则舍弃超出部分。超出情况是由于在传入的4:2:0采样格式的YCbCr图像分辨率的宽或高为奇数时发生,具体的:结合YUV格式的采样特性,将RGB转为4:2:0采样格式的YCbCr的原理已经解释过了,是将一组[2x2]的像素点进行颜色通道转换后,分别得到4个Y、U、V值,再对4个Y值求平均值得到1个Y。如果分辨率的宽或高为奇数,则在以[2x2]划分组的前提下,必定有1行或1列无法进行分组,不能分组的行或列只会发生在行尾或列尾。需要舍弃该行或该列。如果不做超出判断,会导致代码中通过索引访问图像矩阵的像素点时发生越界访问,会导致程序运行异常。
S340.在全局纹理变量rgbImage中获取4个对应索引的RGB像素值,分别将4个RGB像素值作为参数调用RGB转4:2:0采样格式的YCbCr设备函数,得到4个4:2:0采样格式的YCbCr像素值。
S350.对4个4:2:0采样格式的YCbCr像素中的Cb分量和Cr分量分别求取平均值,得到这一组转换单元中4个4:2:0采样格式的YCbCr像素共用的1个Cb分量和1个Cr分量。
S360.向4:2:0采样格式的YCbCr图像数据数组中存储4个4:2:0采样格式的YCbCr像素的Y分量数值,对应索引分别为(destPitch * y + x)、(destPitch * y + x + 1)、(destPitch * (y + 1) + x)和(destPitch * (y + 1) + (x + 1))。
S370.计算CbCr分量在4:2:0采样格式的YCbCr图像数据数组中存储的索引偏移量offset,该值为(destPitch * height)。
S380.计算Cb分量在4:2:0采样格式的YCbCr图像数据数组中存储的索引为(offset + destPitch * (y / 2) + x),向4:2:0采样格式的YCbCr图像数据数组中存储Cb分量。
S390.计算Cr分量在4:2:0采样格式的YCbCr图像数据数组中存储的索引为(offset + destPitch * (y / 2) + x + 1),向4:2:0采样格式的YCbCr图像数据数组中存储Cr分量。
本发明的第二方面提供了一种设备,所述设备包括处理器和存储器,所述存储器中存储有至少一条指令、至少一段程序、代码集或指令集,所述至少一条指令、所述至少一段程序、所述代码集或指令集由所述处理器加载并执行以实现如本发明的第一方面所述的方法。
本发明的第三方面提供了一种存储介质,所述存储介质中存储有至少一条指令、至少一段程序、代码集或指令集,所述至少一条指令、所述至少一段程序、所述代码集或指令集由处理器加载并执行以实现如本发明的第一方面所述的方法。
以上所述仅是本发明的优选实施方式,应当理解本发明并非局限于本文所披露的形式,不应看作是对其他实施例的排除,而可用于各种其他组合、修改和环境,并能够在本文所述构想范围内,通过上述教导或相关领域的技术或知识进行改动。而本领域人员所进行的改动和变化不脱离本发明的精神和范围,则都应在本发明所附权利要求的保护范围内。

Claims (8)

1.一种基于CUDA的视频压缩方法,其特征在于,包括:
定义RGB转4:2:0采样格式的YCbCr设备函数、RGB转4:2:0采样格式的YCbCr核函数和RGB转4:2:0采样格式的YCbCr主机函数;
将第三参数输入RGB转4:2:0采样格式的YCbCr主机函数,所述第三参数包括RGB图像数据数组、4:2:0采样格式的YCbCr图像的宽、4:2:0采样格式的YCbCr图像的高、4:2:0采样格式的YCbCr图像中单行所有像素所占的字节数和4:2:0采样格式的YCbCr图像数据数组;
RGB转4:2:0采样格式的YCbCr主机函数根据指定的4:2:0采样格式的YCbCr图像的宽高计算出调用RGB转4:2:0采样格式的YCbCr核函数需要分配的网格和块数量及结构,并调用RGB转4:2:0采样格式的YCbCr核函数进行视频压缩。
2.根据权利要求1所述的一种基于CUDA的视频压缩方法,其特征在于,所述RGB转4:2:0采样格式的YCbCr设备函数用于将输入的第一参数转换为4:2:0采样格式的YCbCr格式的像素值,所述第一参数包括单个RGB像素值。
3.根据权利要求2所述的一种基于CUDA的视频压缩方法,其特征在于,将输入的第一参数转换为4:2:0采样格式的YCbCr格式的像素值,包括:
使用带伽马矫正的RGB转YCbCr公式,使用Y = 0.257 * R + 0.504 * G + 0.098 * B+ 16公式计算出Y值;
使用带伽马矫正的RGB转YCbCr公式,使用Cb = -0.148 * R + -0.291 * G + 0.439 *B + 128公式计算出Cb值;
使用带伽马矫正的RGB转YCbCr公式,使用Cr = 0.439 * R - 0.368 * G - 0.071 * B+ 128公式计算出Cr值。
4.根据权利要求1所述的一种基于CUDA的视频压缩方法,其特征在于,所述RGB转4:2:0采样格式的YCbCr核函数的输入为第二参数,RGB转4:2:0采样格式的YCbCr核函数根据当前线程对应位置获取RGB图像对应索引的4个RGB像素,将该4个RGB像素转换为4个Y、1个Cb和1个Cr分量后存储在4:2:0采样格式的YCbCr图像数据数组中,所述第二参数包括4:2:0采样格式的YCbCr图像的宽、4:2:0采样格式的YCbCr图像的高、4:2:0采样格式的YCbCr图像中单行所有像素所占的字节数和4:2:0采样格式的YCbCr图像数据数组。
5.根据权利要求1所述的一种基于CUDA的视频压缩方法,其特征在于,RGB转4:2:0采样格式的YCbCr主机函数根据指定的4:2:0采样格式的YCbCr图像的宽高计算出调用RGB转4:2:0采样格式的YCbCr核函数需要分配的网格和块数量及结构,包括:
创建CUDA像素通道描述信息channelDesc,调用cudaCreateChannelDesc函数,指定像素通道为8通道的RGBA且数值类型为无符号整数类型;
使用CUDA纹理模板类型,定义CUDA全局纹理变量texture<uchar4,cudaTextureType2D, cudaReadModeElementType> rgbImage;
调用cudaBindTextureToArray函数,将rgbImage、RGB图像数据数组和channelDesc传入该函数,绑定RGB图像数据数组到全局纹理变量rgbImage中;
定义块结构变量block,指定其结构为<x:32,y:16>,定义网格结构变量grid,计算出网格结构为<x:(width + (2 * block.x - 1)) / (2 * block.x), y:(height + (2 *block.y - 1)) / (2 * block.y)>。
6.根据权利要求5所述的一种基于CUDA的视频压缩方法,其特征在于,调用RGB转4:2:0采样格式的YCbCr核函数进行视频压缩,包括:
根据CUDA核函数的内置变量计算出当前线程待处理的第1个RGB像素的图像数组索引,得到横向索引x和纵向索引y,CUDA核函数的内置变量包括blockIdx、blockDim、threadIdx;
获取1组转换单元中4个RGB像素的横纵向索引,分别为(x,y)、(x+1,y)、(x,y+1)和(x+1,y+1);
判断当前计算得出的4个RGB中位于右下侧的像素索引(x+1,y+1)是否超出核函数传入参数4:2:0采样格式的YCbCr图像分辨率的宽和高的数值,如果超出则舍弃超出部分;
在全局纹理变量rgbImage中获取4个对应索引的RGB像素值,分别将4个RGB像素值作为参数调用RGB转4:2:0采样格式的YCbCr设备函数,得到4个4:2:0采样格式的YCbCr像素值;
对4个4:2:0采样格式的YCbCr像素中的Cb分量和Cr分量分别求取平均值,得到这一组转换单元中4个4:2:0采样格式的YCbCr像素共用的1个Cb分量和1个Cr分量;
向4:2:0采样格式的YCbCr图像数据数组中存储4个4:2:0采样格式的YCbCr像素的Y分量数值,对应索引分别为(destPitch * y + x)、(destPitch * y + x + 1)、(destPitch *(y + 1) + x)和(destPitch * (y + 1) + (x + 1));
计算CbCr分量在4:2:0采样格式的YCbCr图像数据数组中存储的索引偏移量offset,该值为(destPitch * height);
计算Cb分量在4:2:0采样格式的YCbCr图像数据数组中存储的索引为(offset +destPitch * (y / 2) + x),向4:2:0采样格式的YCbCr图像数据数组中存储Cb分量;
计算Cr分量在4:2:0采样格式的YCbCr图像数据数组中存储的索引为(offset +destPitch * (y / 2) + x + 1),向4:2:0采样格式的YCbCr图像数据数组中存储Cr分量。
7.一种设备,其特征在于,所述设备包括处理器和存储器,所述存储器中存储有至少一条指令、至少一段程序、代码集或指令集,所述至少一条指令、所述至少一段程序、所述代码集或指令集由所述处理器加载并执行以实现如权利要求1至6任一项所述的方法。
8.一种存储介质,其特征在于,所述存储介质中存储有至少一条指令、至少一段程序、代码集或指令集,所述至少一条指令、所述至少一段程序、所述代码集或指令集由处理器加载并执行以实现如权利要求1至6所述的方法。
CN202310062346.3A 2023-01-17 2023-01-17 一种基于cuda的视频压缩方法、设备及存储介质 Active CN116260975B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202310062346.3A CN116260975B (zh) 2023-01-17 2023-01-17 一种基于cuda的视频压缩方法、设备及存储介质

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202310062346.3A CN116260975B (zh) 2023-01-17 2023-01-17 一种基于cuda的视频压缩方法、设备及存储介质

Publications (2)

Publication Number Publication Date
CN116260975A true CN116260975A (zh) 2023-06-13
CN116260975B CN116260975B (zh) 2024-01-23

Family

ID=86678722

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202310062346.3A Active CN116260975B (zh) 2023-01-17 2023-01-17 一种基于cuda的视频压缩方法、设备及存储介质

Country Status (1)

Country Link
CN (1) CN116260975B (zh)

Citations (10)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN101431691A (zh) * 2008-12-04 2009-05-13 浙江大学 高动态范围图像的快速并行压缩方法
CN105183562A (zh) * 2015-09-09 2015-12-23 合肥芯碁微电子装备有限公司 一种基于cuda技术对栅格化数据进行抽阶的方法
CN106412598A (zh) * 2016-09-13 2017-02-15 中山大学 基于cuda显卡编码的无线视频传输系统及其传输方法
US10002586B1 (en) * 2006-12-13 2018-06-19 Nvidia Corporation Compression of display data stored locally on a GPU
CN109961404A (zh) * 2017-12-25 2019-07-02 沈阳灵景智能科技有限公司 一种基于gpu并行计算的高清视频图像增强方法
CN112037114A (zh) * 2019-06-03 2020-12-04 西安光启未来技术研究院 图片处理方法及相关装置
CN112102161A (zh) * 2019-06-17 2020-12-18 西安光启未来技术研究院 一种并发图片处理方法及系统
CN112258378A (zh) * 2020-10-15 2021-01-22 武汉易维晟医疗科技有限公司 基于gpu加速的实时三维测量系统及方法
CN112308096A (zh) * 2020-11-02 2021-02-02 得遇科技(杭州)有限责任公司 图像识别方法、装置、计算机设备和存储介质
CN115546403A (zh) * 2022-09-28 2022-12-30 华南理工大学 一种基于cuda的大规模点云三维重建方法

Patent Citations (10)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US10002586B1 (en) * 2006-12-13 2018-06-19 Nvidia Corporation Compression of display data stored locally on a GPU
CN101431691A (zh) * 2008-12-04 2009-05-13 浙江大学 高动态范围图像的快速并行压缩方法
CN105183562A (zh) * 2015-09-09 2015-12-23 合肥芯碁微电子装备有限公司 一种基于cuda技术对栅格化数据进行抽阶的方法
CN106412598A (zh) * 2016-09-13 2017-02-15 中山大学 基于cuda显卡编码的无线视频传输系统及其传输方法
CN109961404A (zh) * 2017-12-25 2019-07-02 沈阳灵景智能科技有限公司 一种基于gpu并行计算的高清视频图像增强方法
CN112037114A (zh) * 2019-06-03 2020-12-04 西安光启未来技术研究院 图片处理方法及相关装置
CN112102161A (zh) * 2019-06-17 2020-12-18 西安光启未来技术研究院 一种并发图片处理方法及系统
CN112258378A (zh) * 2020-10-15 2021-01-22 武汉易维晟医疗科技有限公司 基于gpu加速的实时三维测量系统及方法
CN112308096A (zh) * 2020-11-02 2021-02-02 得遇科技(杭州)有限责任公司 图像识别方法、装置、计算机设备和存储介质
CN115546403A (zh) * 2022-09-28 2022-12-30 华南理工大学 一种基于cuda的大规模点云三维重建方法

Also Published As

Publication number Publication date
CN116260975B (zh) 2024-01-23

Similar Documents

Publication Publication Date Title
CN102881026B (zh) 一种具有透明度信息的图像的调色板装置与生成方法
US20230252758A1 (en) Image processing method and apparatus, electronic device, program, and readable storage medium
CN112929672B (zh) 一种视频压缩方法、装置、设备及计算机可读存储介质
CN116188808B (zh) 图像特征提取方法和系统、存储介质及电子设备
CN114745532B (zh) 混合色温场景白平衡处理方法、装置、存储介质及终端
US20230254484A1 (en) Image Compression Apparatus, Image Compression Method, Electronic Device, and Computer-Readable Storage Medium
CN116091321B (zh) 图像缩放方法、装置、设备及存储介质
CN114040246A (zh) 图形处理器的图像格式转换方法、装置、设备及存储介质
US20090037877A1 (en) Method for providing data to a digital processing means
CN116260975B (zh) 一种基于cuda的视频压缩方法、设备及存储介质
US20240037701A1 (en) Image processing and rendering
CN112991170B (zh) 图像超分辨率重建的方法、装置、终端及存储介质
CN104506867B (zh) 采样点自适应偏移参数估计方法及装置
CN107341835B (zh) 图像处理方法、装置、电子设备及计算机可读存储介质
CN114078078A (zh) 一种图像格式转换方法、装置及存储介质
CN113596581A (zh) 一种图像格式转换方法、装置、计算机设备和存储介质
JP5615344B2 (ja) 色特徴を抽出するための方法および装置
CN106331532A (zh) 一种数据转换方法、装置及电子设备
US20160284056A1 (en) Image processing apparatus and method
KR20020052199A (ko) 데이터 전송 방법 및 그 회로 장치
CN114677464A (zh) 图像处理方法、图像处理装置、计算机设备及存储介质
CN114882149A (zh) 动画渲染方法、装置、电子设备和存储介质
CN109996017B (zh) 一种图像的调整方法及其终端
CN110572652A (zh) 一种静态图像的处理方法及装置
CN113473150B (zh) 一种图像处理方法、装置以及计算机可读存储装置

Legal Events

Date Code Title Description
PB01 Publication
PB01 Publication
SE01 Entry into force of request for substantive examination
SE01 Entry into force of request for substantive examination
GR01 Patent grant
GR01 Patent grant