user avatar
readme文件修改
cooronx authored
af7efacb
Forked from 译验丁真 / proj342-PictureHueCalculation
Up to date with the upstream repository.

PictureHueCalculation

基本信息

2024年全国大学生计算机系统能力大赛-操作系统设计赛(全国)-OS功能挑战赛道

赛题选择:proj-342(使用Qt RHI的接口,实现计算给定图片的主色调。)

队伍名称:译验丁真

队伍学校:西华大学

队伍成员:范思敬,李绍杰,梁城

指导老师:陈红红

目标描述

主色调计算在图像处理、计算机视觉和图像编辑领域中具有广泛的应用。主色调提取可以用于图像分类、图像检索、颜色匹配以及自动化设计等任务。

Qt是一个跨平台的C++图形用户界面应用程序框架,Qt RHI(Rendering Hardware Interface)是Qt中用于图形渲染的底层接口,能够充分利用现代图形硬件的性能。利用其中计算着色器的特性,我们可以大大提高图形处理的效率与准确度。

比赛题目分析和相关资料调研

本次比赛的题目是使用Qt RHI(Rendering Hardware Interface)接口,实现计算给定图片的主色调。

现代图形学api和RHI

现代图形API,如Vulkan、Direct3D 12、Metal和最新版本的OpenGL,与传统的图形API相比,具有以下几个显著特点:

  • 现代图形API提供了对图形硬件的更低层次的访问,使开发者能够更细粒度地控制资源管理和渲染管道。这种控制可以带来更高的性能和更低的延迟。
  • 现代图形API提供了更高效的资源管理机制,允许开发者更好地管理内存和显存的分配与使用。这有助于优化应用程序的性能,特别是在处理大量图形数据时。
  • 与传统API的隐式同步机制不同,现代图形API要求开发者显式地管理同步。这虽然增加了开发的复杂性,但也避免了不必要的同步开销,提高了性能。

而QRHI(Qt Rendering Hardware Interface)是Qt框架中引入的一个底层渲染接口,旨在为开发者提供一种统一的方式来利用现代图形硬件的渲染能力。QRHI抽象了具体的图形API(如Vulkan、Direct3D、Metal等),使得应用程序可以在不同平台上进行高效的图形渲染而无需关心底层图形API的具体实现。

QRHI使用Qt shader baker(qsb)来把多种不同语言的着色器编译为统一的二进制语言SPIR-V,从而实现编写一次着色器跨平台通用。 rhi框架

计算着色器

计算着色器(Compute Shader)是一种特殊类型的着色器,它专门用于执行通用计算任务,而不是直接处理图形渲染。与传统的顶点着色器、片段着色器等图形管道中的着色器不同,计算着色器不受固定的图形渲染管道的约束,可以用于各种计算密集型任务,比如物理模拟、粒子系统计算、图像处理、科学计算等。

在计算着色器中,用户可以使用一个称为工作组的概念定义计算着色器正在运行的空间。这个空间是三维(x,y,z)的,用户可以将任意维度设置为 1 ,以此在一维或二维空间中执行计算。

工作组是用户可以(从主机应用程序)执行的最小计算操作量,在计算着色器执行期间,工作组顺序可能会任意变化。 在下图中,每个红色立方体都是一个工作组。

每个 Compute shader 都运行在单个工作单元上,这个工作单元称为工作项,一个工作组包含一个或多个工作项。 rhi框架

开发计划

  • 实现QRHI实例的初始化
  • 实现计算着色器的书写
  • 使用qsb(qt shader baker)编译着色器为qsb文件
  • 使用计算着色器完成图片主色调的计算

系统测试情况

展示效果图如下

图片展示效果 图片展示效果 图片展示效果 图片展示效果

遇到的主要问题和解决方法

计算着色器运行在GPU中,这个过程是并发的,我们不能控制其执行顺序,因此我们要在着色器代码中加上同步方法。 例如atomicAdd() barrier(),来达到原子累加和屏障的效果。

提交仓库目录和文件描述

  • compute_shaders :计算着色器代码
  • output_img : 结果图片
  • test_pics : 测试样例图片