HSI颜色空间及其应用

转自:http://nkwavelet.blog.163.com/blog/static/22775603820147197503722/
【摘要】
本文首先阐述HSI颜色模式的基本特性,然后介绍RGB和HSI颜色空间互相转换的算法,并给出算法核心代码和效果图,最后将HSI颜色空间应用到图像增强,得到几个增强之后的效果图。

【参考资料】 


1.  HSI颜色空间简介
     HSI颜色空间是从人的视觉系统出发,用色调(Hue)、色饱和度(Saturation或Chroma)和亮度(Intensity或Brightness)来描述色彩。HSI颜色空间可以用一个圆锥空间模型来描述。用这种描述HIS色彩空间的圆锥模型相当复杂,但确能把色调、亮度和色饱和度的变化情形表现得很清楚。
     RGB 向HSI 模型的转换是由一个基于笛卡尔直角坐标系的单位立方体向基于圆柱极坐标的双锥体的转换。基本要求是将RGB 中的亮度因素分离,将色度分解为色调和饱和度,并用角向量表示色调,如下图所示。
HSI颜色空间及其应用 - nkwavelet - 小波的世界
 2.  RGB转换至HSI的几种常见方法
      下图列出几种常用的RGB-HSI转换公式:
HSI颜色空间及其应用 - nkwavelet - 小波的世界
        几何推导法最为经典,可追溯到30多年前(Tenenbaum,1974)。基本思路是先分离出亮度信息,将三维空间降为二维。在二维平面内利用解析几何的向量点积公式求出HSI 模型的色调分量值。


     
  坐标变换法的转换思路是基于RGB立方体沿对角线垂直竖立后与Munsell双锥体相似(图4)。通过直角坐标系的旋转,求出转换矩阵,并与极坐标系转换,得出转换公式(Kenneth,1996)。
HSI颜色空间及其应用 - nkwavelet - 小波的世界
        分段定义法是直接根据色度学定义得出转换公式。根据色度学的基本概念,将三基色RGB的色调分别定为0°,120°, 240°。RGB三分量中某分量最大时,该分量即为主分量,色调值位于该分量附近(正负60°范围)。偏差幅度由另外二个分量的相对差异归一化后决定(Foley,1990)。此方法所得模型常称作HSL模型。
       其中,算法1和算法2的色调H公式只是形式不同,实则等价。 
       几套公式转换后的H值域为[0, 2π],饱和度和亮度均为[0,1]。 算法2的取值范围比较特别,S为[0, 26],I为[0,3] 。 
       最后,算法5所得转换模型的空间分布平均性最好,值域标准,适应性强。 HSI各分量间相对独立,在应用转换时,可以将上述几套公式中的HSI公式交叉使用,但也因此容易产生混淆。
 
3. RGB与HSI互相转换公式
       此处的RGB转HSI的公式采用算法1(几何推导法),HSI转RGB是算法1的逆运算。
       首先是RGB转HSI:
HSI颜色空间及其应用 - nkwavelet - 小波的世界
 
        然后是HSI转RGB:
HSI颜色空间及其应用 - nkwavelet - 小波的世界
 
  4.  RGB与HSI互相转换的C代码 
        首先给出RGB转HSI的代码,算法1:
         HSI颜色空间及其应用 - nkwavelet - 小波的世界
       然后是RGB转HSI的代码,算法4:
HSI颜色空间及其应用 - nkwavelet - 小波的世界
        最后是与算法1匹配的HSI转RGB代码:
  HSI颜色空间及其应用 - nkwavelet - 小波的世界
 5.  算法1和算法4速度测试
      此处测试的代码就是上面给出的代码,没有做任何优化。测试代码如下:
HSI颜色空间及其应用 - nkwavelet - 小波的世界 
 结果是:算法4的时间是算法1的一半
  HSI颜色空间及其应用 - nkwavelet - 小波的世界
   
 6.  算法4相对算法1的误差分析 
      算法1是最经典的RGB转HSI算法,也是最常用的算法,在某些对速度要求很高的情况下,我们可以用算法4替代算法1以提高图像处理速度。因此有必要分析一下这种快速算法的误差。以下是测试误差的代码:
HSI颜色空间及其应用 - nkwavelet - 小波的世界
    结果是: 平均误差是0.12弧度(6.8756度),最大误差是0.191弧度(10.9483度)。 色调H将[0, 2*PI)等分为3个扇形,这个测试表明,算法4的误差不会扩散到另外一个扇区,因此不会影响到HSI转RGB的公式表达式。
    HSI颜色空间及其应用 - nkwavelet - 小波的世界
  
7. HSI颜色空间小应用
    将RGB转换到HSI空间,通过S变量可以调整图像的饱和度,以下是一个效果图:

            HSI颜色空间及其应用 - nkwavelet - 小波的世界              HSI颜色空间及其应用 - nkwavelet - 小波的世界

                                (原始图像)                                     (饱和度增强后图像)

一、数据库的背景及功能需求 进入21世纪以来,计算机的普及应用和信息技术、网络技术的发展给人们的工作和生活带来了极大的便利和高效,信息化、电子化已经成为节约运营成本,提高工作效率的首选。 相比之下,国内的相当数量的中小型医院的病人资料工作流程还采用相对保守的人工工作方式,数据信息的查询和存储的成本较高,而且效率还很低下。所以需要一种对于医院的病人资料管理系统来高效、低成本、便捷的进行医院病人信息数据的查询和存储。 1. 病人的相关信息应该由医院数据库管理员进行添加、删除、修改、查询等维护操作。 2. 需通过病人所患的疾病来确定病人的治疗 3. 对病人的编号、出生日期、性别、工作、住址信息进行查询。 4. 对病人的治疗进程,缴费情况等进行及时的更新与统一管理。 5. 医院需通过治疗结果来查看病人是否结束治疗,以进行必要的及时续约等行为。 6. 病人可通过数据库进行对所交费用,治疗情况的相关信息进行查看。 7. 病人信息的更新等等由数据库管理员进行维护。 系统功能的基本功能: 1病人信息包含编号,姓名,性别,出生日期,工作单位及地址,住址,工作,保险,医保号,电话,邮箱,死亡日期。 2交费项目信息包含项目序号,项目类型,缴费金额等 3回访记录包含住号,病人编号,回访日期,回访人,记录,生命体征。 4 可通过对数据库的查询了解病人的相关信息,以及病情,并确定治疗方案。 所有关系模式都属于BC范式 (1)在关系模式patient中patientID是主键,所以在包含属性patientID的函数依赖是一个superkey。 (2)在关系模式中inpatient中number为主键,所以在所包含属性number的函数依赖是一个superkey。 (3)在关系模式outpatient中patientID为主键,所以包含patientID的函数依赖是一个superkey。 (4)在关系模式bed中number是主键,所以包含patientID的函数依赖是一个superkey。 (5)在关系模式department中depname是主键,所以在包含属性depname的函数依赖是一个superkey。 (6)在关系模式中re_call中number为主键,所以在所包含属性number的函数依赖是一个superkey。 (7)在关系模式case中caseID为主键,所以包含caseID的函数依赖是一个superkey。 (8)在关系模式charge1中chargeID是主键,所以包含chargeID的函数依赖是一个superkey。 (9)在关系模式charge2中chargeID是主键,所以在包含属性chargeID的函数依赖是一个superkey。 (10)在关系模式中inotice中inoticeID为主键,所以在所包含属性inoticeID的函数依赖是一个superkey。所以一定属于BCNF。 二、数据库的概念结构设计 病人资料管理系统的E-R模型 三、数据库的物理结构设计 住病人inpatient 列名 数据类型 字段长度 字段描述 备注 Number Bigint 住号 主键 patientID bigint 病人编号 非空,外码 Name Bigint 姓名 Inday Datetime 入时间 Bedroom char 4 床号 Sort varchar 20 入科别 病人信息表patient 列名 数据类型 长度 字段描述 备注 patientID bigint 病人编号 主键 Name varchar 20 姓名 不能为空 Sex char 4 性别 Birth datetime 出生日期 Dep varchar 40 单位 Depadd varchar 60 单位地址 address varchar 60 住址 Work varchar 10 工作 在职、离休、退休 Insure char 4 医保 insnumb varchar 30 医保号 有、无,不为空 Tel varchar 10 电话 Email varchar 50 E-mail deathday varchar 20 死亡日期 门病人表outpatient 列名 数据类型 字段长度 字段描述 备注 patientID Bigint 病人编号 主键 Jz_date Varchar 20 就时间 Pay varchar 10 缴费情况 病人就花费 Name varchar 20 姓名 非空 Sex char 10 性别 Age Int 年龄 床位bed 列名 数据类型 字段长度 字段描述 备注 Number Bigint 住号 主键 Name Varchar( 20 姓名 非空 Bedroom bigint 床号 Doctor Varchar 20 主治医生 主管本床位的医生姓名 Result Varchar 20 治疗结果 Department varchar 20 所属病区 病区department 列名 数据类型 字段长度 字段描述 备注 Depname varchar 10 病区名称 主键 Bedamount bigint 病床数 Responsor varchar 20 负责人姓名 非空 Inpeople bigint 入住人数 Wellpor real 好转率 Death real 、 死亡率 回访re_call 列名 数据类型 长度 字段描述 备注 Number bigint 序号 主键,自动产生 patientID bigint 病人编号 不为空 Callday varchar 20 回访时间 Callbody varchar 20 回访人 Record varchar 500 回访记录 Life char 8 生命特征 死亡 门病历ccase 列名 数据类型 字段长度 字段描述 备注 caesID Bigint 病历号 主键 Name Varchar 20 姓名 非空 Context Varchar 60 病例内容 Diadate datetime 断时间 Doctor Varchar 20 主治医生 联系 支付2pay2 列名 数据类型 字段长度 字段描述 备注 PatientID bigint 病人编号 主键 chargeID Bigint 支付项目号 主键 Amount varchar 20 payDate datetime 支付时间 收费项目2charge2 列名 数据类型 字段长度 字段描述 备注 chargeID bigint 项目序号 主键 Chargesort Varchar 20 项目类型 Amount Varchar 10 收费金额 Name Varchar 20 病人姓名 Operator Varchar 20 收款员 收费项目1charge1 列名 数据类型 字段长度 字段描述 备注 chargeID bigint 项目序号 主键 Name Varchar 20 病人姓名 number bigint 住号 外码 category Varchar 10 收费类型 chargeday datetime 收费日期 opertor varchar 20 收款人 Amount Varchar 10 应收金额 payamount Char 10 交费金额 入通知单inotice 列名 数据类型 字段长度 字段描述 备注 inoticeID bigint 通知单号 主键 doctor varchar 20 医师姓名 非空 Name varchar 20 病人姓名 非空 PatientID bigint 病人编号 外码 Diagadvice varchar 40 断建议 Pay varchar 20 收费情况 Pass Char 4 是否批准 是 否。非空 关系及各属性 Patient(patientID,name,sex,birth,dep,depadd,address,work,insure,insnumb,tel,email,deathday) Inpatient(number,patientID,name,inday,sort,bedroom) Outpatient(patientID,name ,sex,age,jz_date,pay) Bed(number,name,bedroom,doctor,result,department,empty) Department(depname,bedamount,responsor,inpeople,wellpor,,deathpor) Re_call(number,patientID,callday,life,record,callbody) Case(caseID,name,context,diadate,doctor) Charge2(chargeID,chargesort,amount,name,operator) Charge1(chargeID,category,name ,number,chargeday,payamount,amount) inotice(inoticeID,doctor,name,patientID,diaadvice,pay,pass) 联系 Pay2(patientID,amount,paydate,chargeID) 触发器 1提醒触发器 create trigger reminder on patient after insert,update as raiserror('你在插入或修改病人的数据',16,10); 2.更新操作的触发器 create trigger hehe on outpatient for update as begin update outpatient set pay=pay*0.9 end 存储过程 1病人信息插入的存储过程 create procedure patientInsert ( @patientID bigint, @name varchar(20), @sex char(4), @birth datetime, @dep varchar(40), @depadd varchar(60), @address varchar(60), @work varchar(10), @insure char(4), @insnumb varchar(30), @tel varchar(15), @email varchar(50), @deathday datetime ) as insert into patient( name,sex ,birth ,dep,depadd ,address ,work ,insure,insnumb ,tel ,email ,deathday ) values(@name,@sex ,@birth ,@dep,@depadd ,@address ,@work ,@insure,@insnumb ,@tel ,@email ,@deathday ) 2 住病人信息插入的存储过程 create procedure inpatientInsert ( @number bigint, @patientID bigint, @name varchar(20), @inday datetime, @sort char(20), @bedroom char(4) ) as insert into inpatient( number,patientID ,name ,inday ,sort ,bedroom ) values( @number ,@patientID ,@name ,@inday ,@sort ,@bedroom ) 索引 1 use hospital_patient create unique nonclustered index inpatient_name on inpatient ( name ) 2 use hospital_patient create nonclustered index charge_amount on charge1 ( amount desc )
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值