博士论文||The development of a visual language for image processing applications

编者的话:这是一篇写于1992年,有关图像处理应用开发的博士论文,论文作者现在是一家咨询公司的老板,而他的导师中有一位是ISP领域的大师Don Bailey,在读完这篇之后,又下载了Don Bailey在IEEE上most popular的几篇paper,大多是讲如何将基于软件的算法转换为基于FPGA的算法,以及ISP系统设计思路概览。

 

1.本篇论文设计的东西类似是一个MATLAB的Stimulation,用户可以在该软件上互动,根据个人需求选择适合的算法,参数,进行并行或串行处理图像;

2.作者使用的语言是面向对象的语言Think C,这个语言没有搜到太多,但根据C++面向对象的特点可以大致推测Think C的一些特性:面向对象,有Class,指针

3.作者在前三章分别叙述了:算法运行的思路(process-oriented,data-oriented);算法设计的思路(基于经验的,发散式的);软件界面设计的哲学思考;

4.作者重点介绍的:将算法设计与用户使用习惯相结合,更适合研发使用,借鉴了部分Photoshop的设计哲学。(这并不是本文作者关注的重点,因此我并未花太多心思在此上,但也有一些对硬件的启发,作者自己也有提到)

 

先讲讲对我启发较大的算法运行思维:process-oriented pipeline and data-oriented pipeline.

在过往我新上手某个新的算法时,我关注的是这个算法的整体功能是什么,然后开始一步一步啃,每一个步骤代表的是什么意思,在硬件设计时为什么要这么设计。(比如FPGA中为了节约面积和功耗常使用减法实现除法,用加法实现乘法)这样当我对某一个设计步骤不清楚时,我很容易认死理,去钻研理解这个步骤是什么,直到打通该步骤,再沿着这个步骤往下看,一环套一环。这个方法固然没错,新手上手时需要对该模块整体熟悉一遍,但当某个算法模块非常庞大时,很容易进入细枝末节而看不到全局功能,特别是时间有限时,这种方法就显得有些局促。这就是一个非常典型的process-oriented pipeline的思考方式。

data-oriented pipeline关注的是一个算法模块对输入它的数据做了什么操作,得到什么结果。这个过程几乎可以抽象出一个非常简单易懂的数学函数,根据这个数学函数去抓每个模块的关键步骤,可以非常快速地理解整个ISP Pipeline。在阅读到这部分时,突发奇想找出一个项目里所有的算法代码,先看清楚算法原理,然后从输出往输入方向找关键步骤,不懂的地方问设计的人,大约1-2小时就可以彻底看懂一个小的模块(eg:AWB,BP,BLC),但编者还没有把这种思维应用到更加复杂的模块,想再实践以下。

以上这两种思考方式使用的场景是不同的,还要更多摸索在不同的场景下交叉使用这两种思维,形成自己的经验和判断。

作者提到的第二个观点是:算法开发的本质是解决问题,一个算法就是一个问题公式;算法开发有两种类型:stepwise refinement及heuristic approach

1.stepwise refinement:自上而下将问题分解为若干子问题,形成问题树/问题链,并一步一步解决子问题,最终解决整体问题。

有三个核心来扩展算法开发人员的思维:

(1)Where to from here?

(2)How to get there?

(3)How good was that move?

这种思维的不足:每个子问题是可以被解决的,但整体效果并不好。

2.heuristic approach:以问题为起点,以需求为终点,头脑风暴朝着终点方向思考,但每一步的方法并不唯一,只要方向ok就可以。

  这个方法的核心是找到最critical的问题,然后在子问题内探索最经典的算法,多尝试几种,综合对比哪种效果最好。比如一般去除紫边的方法可以分为:检测和校正两个步骤,那么就把解决方案分为检测算法及校正算法,检测算法可以使用多个算子分别检测,对比结果;校正算法则更多元,整体上是基于边缘和色彩的综合校正,可选择的范围更加广阔。将检测与校正算法排列组合,对比哪种算法效果最好,得出最终结论。

作者的第三个观点:用户与算法的互动,本质上是设计符合用户需求的界面及算法。

作者对比了GUI界面,编程语言,互动式编程语言之间的区别和联系,对本人的参考价值不大,因为我当然更擅长也更喜欢直接使用编程语言啦!这里对我的启发是看到软件设计最初的界面和后来改进之间的区别和联系,以及一些最根本的设计思维,如果后续会参加到应用开发的设计中去时,可以设定最基本也最核心的principles。

1.如何让用户根据图形界面+text明确某个函数的功能?

2.如何将算法步骤可视化?

3.如何指导用户调节每个函数的参数?

Reference:The development of a visual language for image processing applications : a thesis presented in partial fulfilment of the requirements for the degree of Doctor of Philosophy in Computer Science at Massey University, Palmerston North, New Zealand

posted on 2026-03-23 21:25  SunnyBai  阅读(13)  评论(0)    收藏  举报