技术心得记录:关于灰度的一些知识(转)

简介: 技术心得记录:关于灰度的一些知识(转)

灰度使用黑色调表示物体。 每个灰度对象都具有从 0%(白色)到 100%(黑色)的亮度值。 使用黑白或灰度扫描仪生成的图像通常以灰度显示。


  使用灰度还可将彩色图稿转换为高质量黑白图稿。 在这种情况下,Adobe Illustrator 放弃原始图稿中的所有颜色信息;转换对象的灰色级别(阴影)表示原始对象的亮度。


  将灰度对象转换为 RGB 时,每个对象的颜色值代表对象之前的灰度值。 也可以将灰度对象转换为 CMYK 对象。


  自然界中的大部分物体平均灰度为18%。


  在物体的边缘呈现灰度的不连续性,图像分割就是基于这个原理。


  所谓灰度色,就是指纯白、纯黑以及两者中的一系列从黑到白的过渡色。我们平常说所的黑白照片、黑白电视,实际上都应该称为灰度照片、灰度电视才确切。灰度色中不包含任何色相,即不存在红色、黄色这样的颜色。


  灰度的通常表示方法是百分比,范围从0%到100%。Photoshop中只能输入整数,在Illustrator和GoLive允许输入小数百分比。


  注意这个百分比是以纯黑为基准的百分比。与RGB正好相反,百分比越高颜色越偏黑,百分比越低颜色越偏白。


  灰度最高相当于最高的黑,就是纯黑。灰度最低相当于最低的黑,也就是“没有黑”,那就是纯白。


   虽然灰度共有256级,但是由于Photoshop的灰度滑块只能输入整数百分比,因此实际上从灰度滑块中只能选择出101种(0%也算一种)灰度。大 家可以在灰度滑块中输入递增的数值然后切换到RGB滑块察看,可以看到:0%的灰度RGB数值是255,255,255;1%灰度的RGB数值是 253,253,253;2%灰度RGB值为250,250,250。也就是说,252,252,252这样的灰度是无法用Photoshop的灰度滑块 选中的。相比之下Illustrator的灰度允许输入两位小数,使得选色的精确性大大提高了 。


灰度图像gray level image


在计算机领域中,灰度数 字图像是每个像素只有一个采样颜色的图像。这类图像通常显示为从最暗黑色到最亮的白色的灰度,尽管理论上这个采样可以任何颜色的不同深浅,甚至可以是不同 亮度上的不同颜色。灰度图像与黑白图像不同,在计算机图像领域中黑白图像只有黑色与白色两种颜色;灰度图像在黑色与白色之间还有许多级的颜色深度。但是, 在数字图像领域之外,“黑白图像”也表示“灰度图像”,例如灰度的照片通常叫做“黑白照片”。在一些关于数字图像的文章中单色图像等同于灰度图像,在另外一些文章中又等同于黑白图像。


灰度图像经常是在单个电磁波频谱如可见光内测量每个像素的亮度得到的。


用 于显示的灰度图像通常用每个采样像素 8 位的非线性尺度来保存,这样可以有 256 级灰度。这种精度刚刚能够避免可见的条带失真,并且非常易于编程。在医学图像与遥感图像这些技术应用中经常采用更多的级数以充分利用每个采样 10 或 12 位的传感器精度,并且避免计算时的近似误差。在这样的应用领域每个采样 16 位即 65536 级得到流行。


二值图像


二 值图像是一种简单的图像格式,它只有两个灰度级,即"0"表示黑色的像素点,"255"表示白色的像素点。二值图像处理在图像处理领域占据很重要的位置, 在具体的图像处理应用系统中,往往需要对于获得的二值图像再进一步进行处理,以有利于后期的识别工作。二值图像处理运算是从数学形态学下的集合论方法发展 起来的,尽管它的基本运算很简单,但是却可以产生复杂的效果。常用的二值图像处理操作有许多方法,如腐蚀、膨胀、细化、开运算和闭运算等等。


ubject: 为显示256级灰度图,需把16bpp的framebuffer改为24位,请高手指点一二


Author: freeubuntu Posted: 2007-09-24 10:54 Length: 1,718 byte(s)


【Original】 【Print】 【Top】


大家知道,16位的制式为r 5 g 6 b 5,最多能显示2的5次方(即32级灰度),现在16位,640480的,framebuffer已经可以在我自己的TFT屏上正常运行,但是为了达到256级灰度必须改为24位的framebuffer,


arm是s3c2440,TFT屏是LG.PHILIPS LCD ,为了运行24位的framebuffer,我做了如下修改


1。我把16位驱动中的16位相关都改为24位的了,例如:


if ( var->bits_per_pixel == 24 ) {//change add


var->red.offset = 16; var->red.length = 8;


var->green.offset = 8; var->green.length = 8;


var->blue.offset = 0; var->blue.length = 8;


var->transp.offset = var->transp.length = 0;


}else if ( var->bits_per_pixel == 16 ) {


var->red.offset = 11; var->red.length = 5;


var->green.offset = 5; var->green.length = 6;


var->blue.offset = 0; var->blue.length = 5;


var->transp.offset = var->transp.length = 0;


}


2。因为16位的framebuffer可以运行,我没有修改5个控制寄存器,我修改了地址寄存器2,3,如下


/ 16bpp 24bpp/


new_regs.lcdsaddr2 = LCDADDR_BASEL(


((unsigned long)VideoPhysicalTemp + (var->xres 3 (var->yres/-1/)))


1);//change 2 to 3


new_regs.lcdsaddr3 = LCDADDR_OFFSET(0) | (LCDADDR_PAGE(var->xres3/2) /] 1/);


编译后运行,在屏幕上出现了(横4竖4)共16个小图象,都是24位的(用示波器检测过了),


这是怎么回事呢?是寄存器没有设置正确,还是在修改驱动时出现了问题呢?


本人新手,请大家指教,谢谢!!


【Original】 【Print】 【Top】


Subject: Re: 为显示256级灰度图,需把16bpp的framebuffer改为24位,请高手指点一二


Author: gg940231 Posted: 2007-09-24 10:59 Length: 62 byte(s)


【Original】 【Print】 【Top】


好像只有 4级 ,16级灰度 吧,,,还没有听说过 256级灰度呢。。。


----


【Original】 【Print】 【Top】


Subject: Re: 为显示256级灰度图,需把16bpp的framebuffer改为24位,请高手指点一二


Author: freeubuntu Posted: 2007-09-24 11:05 Length: 192 byte(s)


【Original】 【Print】 【Top】


这里再做一些补充,和许多TFT屏一样我的TFT屏上只有18根数据线(R6 G6 B6),framebuffer作成24位的(R8G8B8),TFT上显示6位的数据(R6G6B6),这样就能显示64级灰度了,我的目标就是显示64级灰度。谢谢大家!


【Original】 【Print】 【Top】


Subject: Re: 为显示256级灰度图,需把16bpp的framebuffer改为24位,请高手指点一二


Author: freeubuntu Posted: 2007-09-24 11:11 Length: 92 byte(s)


【Original】 【Print】 【Top】


24位的图象约有16M色的图象(即2的24次方),当RGB的值相等时显示为灰度,即2的8次方(256级灰度)


【Original】 【Print】 【Top】


Subject: Re: 为显示256级灰度图,需把16bpp的framebuffer改为24位,请高手指点一二


Author: gg940231 Posted: 2007-09-24 11:22 Length: 89 byte(s)


【Original】 【Print】 【Top】


那你就直接用 16位TFT 的就可以了啊,在 gui 里去增加个函数, 转换 16位真彩色 到 你的 灰度。


----


【Original】 【Print】 【Top】


Subject: Re: 为显示256级灰度图,需把16bpp的framebuffer改为24位,请高手指点一二


Author: freeubuntu Posted: 2007-09-24 11:33 Length: 99 byte(s)


【Original】 【Print】 【Top】


这也行?怎么搞?


还有那个写GUI的会砍死我的,他本来任务就重,我还想搞完驱动去帮他一把呢!!


----


email:freeubuntu@hotmail.com


【Original】 【Print】 【Top】


Subject: Re: 为显示256级灰度图,需把16bpp的framebuffer改为24位,请高手指点一二


Author: gg940231 Posted: 2007-09-24 11:41 Length: 99 byte(s)


【Original】 【Print】 【Top】


不知道你用什么 GUI ,我的是 microwindows ,通常底层就是些,打点,划线的函数,看看吧,不复杂的。。。


----


【Original】 【Print】 【Top】


Subject: Re: 为显示256级灰度图,需把16bpp的framebuffer改为24位,请高手指点一二


Author: rocky1972 Posted: 2007-09-24 11:48 Length: 614 byte(s)


【Original】 【Print】 【Top】


**


2。因为16位的framebuffer可以运行,我没有修改5个控制寄存器,我修改了地址寄存器2,3,如下


/ 16bpp 24bpp/


new_regs.lcdsaddr2 = LCDADDR_BASEL(


((unsigned long)VideoPhysicalTemp + (var->xres 3 (var->yres/-1/)))


1);//change 2 to 3


*


16bpp换成24bpp当然还要修改LCD CON1的BPPMODE=TFT24BPP了,查看datasheet LCDCON1 寄存器一下。


【Original】 【Print】 【Top】


Subject: Re: 为显示256级灰度图,需把16bpp的framebuffer改为24位,请高手指点一二


Author: rockos Posted: 2007-09-24 12:47 Length: 210 byte(s)


【Original】 【Print】 【Top】


晕~~~


2.6.20内核中包含的s3c24xx framebuffer驱动可以直接支持24位色, copy到你的版本就可以了.


这个版本的fb把lcdcon的功能基本上都实现了, 1, 2, 4, 8, 12, 16, 24位色模式都支持了.


----


不喜欢GPL, BSD的免费许可不错.


【Original】 【Print】 【Top】


Subject: Re: 为显示256级灰度图,需把16bpp的framebuffer改为24位,请高手指点一二


Author: freeubuntu Posted: 2007-09-24 14:39 Length: 222 byte(s)


【Original】 【Print】 【Top】


对不起,这个我忘说了,控制寄存器1我改了的,如下:


.reg = {


/111111000 这里把寄存器改为13/


.lcdcon1 = (1[8)|(1[7)|(3[5)|(13[1),


----


email:freeubuntu@hotmail.com


【Original】 【Print】 【Top】


Subject: Re: 为显示256级灰度图,需把16bpp的framebuffer改为24位,请高手指点一二


Author: freeubuntu Posted: 2007-09-24 15:11 Length: 118 byte(s)


【Original】 【Print】 【Top】


有这等好事!原来我用的是2.6.12的内核,我马上下一个2.6.20的内核看一下,


要知后事如何,且听下回分解。


----


email:freeubuntu@hotmail.com


【Original】 【Print】 【Top】


Subject: Re: 为显示256级灰度图,需把16bpp的framebuffer改为24位,请高手指点一二


Author: freeubuntu Posted: 2007-09-24 15:58 Length: 65 byte(s)


【Original】 【Print】 【Top】


2.6.20中的framebuffer我看了一下,不行啊,要改很多地方吧


----


email:freeubuntu@hotmail.com


【Original】 //代码效果参考:http://www.jhylw.com.cn/534234809.html

【Print】 【Top】

Subject: Re: 为显示256级灰度图,需把16bpp的framebuffer改为24位,请高手指点一二


Author: freeubuntu Posted: 2007-09-24 18:42 Length: 1,647 byte(s)


【Original】 【Print】 【Top】


我已经仔细看过了2.6.20.6内核中的s3c2410fb.c,我发现这个也是16位的。如下:


if (fbi->mach_info->type == S3C2410_LCDCON1_TFT)


switch (var->bits_per_pixel) {


case 1:


fbi->regs.lcdcon1 |= S3C2410_LCDCON1_TFT1BPP;


break;


case 2:


fbi->regs.lcdcon1 |= S3C2410_LCDCON1_TFT2BPP;


break;


case 4:


fbi->regs.lcdcon1 |= S3C2410_LCDCON1_TFT4BPP;


break;


case 8:


fbi->regs.lcdcon1 |= S3C2410_LCDCON1_TFT8BPP;


break;


case 16:


fbi->regs.lcdcon1 |= S3C2410_LCDCON1_TFT16BPP;


break;


default:


/ invalid pixel depth /


dev_err(fbi->dev, "invalid bpp %d ", var->bits_per_pixel);


}


else


switch (var->bits_per_pixel) {


case 1:


fbi->regs.lcdcon1 |= S3C2410_LCDCON1_STN1BPP;


break;


case 2:


fbi->regs.lcdcon1 |= S3C2410_LCDCON1_STN2GREY;


break;


case //代码效果参考:http://www.jhylw.com.cn/043832033.html

4:

fbi->regs.lcdcon1 |= S3C2410_LCDCON1_STN4GREY;


break;


case 8:


fbi->regs.lcdcon1 |= S3C2410_LCDCON1_STN8BPP;


break;


case 12:


fbi->regs.lcdcon1 |= S3C2410_LCDCON1_STN12BPP;


break;


default:


/ invalid pixel depth /


dev_err(fbi->dev, "invalid bpp %d ", var->bits_per_pixel);


}


----


email:freeubuntu@hotmail.com


【Original】 【Print】 【Top】


Subject: Re: 为显示256级灰度图,需把16bpp的framebuffer改为24位,请高手指点一二


Author: freeubuntu Posted: 2007-09-27 15:44 Length: 91 byte(s)


【Original】 【Print】 【Top】


现在已经确定是寄存器设置的问题了,在bootloader中对logo 进行同样的寄存器设置也出现了16幅图象

相关文章
|
9月前
|
Kubernetes 监控 测试技术
k8s中蓝绿部署、金丝雀发布、滚动更新汇总
k8s中蓝绿部署、金丝雀发布、滚动更新汇总
|
27天前
|
算法 测试技术 持续交付
四种灰度分布方案
【6月更文挑战第10天】产品迭代加速,灰度发布成为降低风险、优化用户体验的关键。它允许新老版本并存,逐步引入流量验证新版本稳定性。
|
2月前
|
运维 负载均衡 Kubernetes
一文搞懂蓝绿发布、灰度发布和滚动发布
一文搞懂蓝绿发布、灰度发布和滚动发布
|
弹性计算 运维 监控
实验三:灰度发布 | 学习笔记
快速学习实验三:灰度发布
328 0
实验三:灰度发布 | 学习笔记
|
缓存 Kubernetes 容灾
应用发布新版本如何保障业务流量无损(一)| 学习笔记
快速学习应用发布新版本如何保障业务流量无损
160 0
应用发布新版本如何保障业务流量无损(一)| 学习笔记
|
开发框架 运维 Kubernetes
应用发布新版本如何保障业务流量无损(二)| 学习笔记
快速学习应用发布新版本如何保障业务流量无损
153 0
应用发布新版本如何保障业务流量无损(二)| 学习笔记
|
SQL 缓存 运维
全链路灰度在数据库上我们是怎么做的? | 学习笔记
快速学习全链路灰度在数据库上我们是怎么做的?
533 0
全链路灰度在数据库上我们是怎么做的? | 学习笔记
|
SQL 缓存 Cloud Native
全链路灰度在数据库上我们是怎么做的?
微服务体系架构中,服务之间的依赖关系错综复杂,有时某个功能发版依赖多个服务同时升级上线。我们希望可以对这些服务的新版本同时进行小流量灰度验证,这就是微服务架构中特有的全链路灰度场景,通过构建从网关到整个后端服务的环境隔离来对多个不同版本的服务进行灰度验证。
1527 1
全链路灰度在数据库上我们是怎么做的?
|
Java 中间件 测试技术
全链路灰度新功能:MSE上线配置标签推送
微服务场景下,全链路灰度作为一种低成本的新功能验证方式,得到了越来越广泛的应用。除了微服务实例和流量的灰度,微服务应用中的配置项也应该具备相应的灰度能力,以应对灰度应用对特殊配置的诉求。
全链路灰度新功能:MSE上线配置标签推送
|
Cloud Native Java 中间件
全链路灰度新功能:MSE 上线配置标签推送
本文介绍了全链路灰度场景给配置管理带来的问题,介绍了 MSE 针对这一场景的解决方案,并通过实践的方式展示了配置标签推送的使用流程。后续,MSE 还会针对配置治理做更多的探索,帮助用户更好地解决微服务配置管理中的难题,提高微服务应用的稳定性。
全链路灰度新功能:MSE 上线配置标签推送