王朝网络
分享
 
 
 

黑白图像的缩小灰度级显示算法的编写

王朝delphi·作者佚名  2006-01-09
宽屏版  字体: |||超大  

大家都知道,黑白图像是0,1二值的,缩小显示的时候由于n个点转化成1个点会导致图像局部细节信息丢失,比如一条宽度一个象素的细线由于缩小可能就会没有显示,而使用灰度级显示正是能解决这个缩小显示的问题,Windows自带的Eastman Software提供的的图像处理可以在你缩小黑白图片的时候使用灰度级来显示,下面我们就来深入研究一下这个算法是如何实现的吧。

基本约定:

1. 灰度级缩小显示只正对黑白或者灰度影像,经过算法变换可用于彩色影像

2. 只有在显示<100%的时候灰度级显示才生效

3. 灰度级缩小算法是基于原始图像来运算

具体算法:

1. 缩小算法

按照与原图比例1:n来对原图nXn个点生成1个点(n可以是浮点数),考虑到效率可以使用灰度级变换,从0-255 取中间点127大于该值显示白小于改值显示黑色。

2. 灰度级显示算法

结合缩小算法nXn个点生成一个点的原则,在原图上按照每个点的权值和颜色相乘再除以n来得到生成点的颜色值。

例如:

a1 a2 a3 a4 a5 a6 a7 a8 a9 a10

|-----|---*-|-----|-*---|-----|*----|-----*-----|-----|-----|

|---------|---------|----------|----------|----------|---------|--

b1 b2 b3 b4 b5 b6

经过变换后

b1 = (1.0*a1+0.8*a2)/1.8

b2 = (0.2*a2+a3+0.6*a3)/1.8

……

这是一维坐标,扩展到二维空间算法相同。

具体实现方法:

1. 计算出缩小后的位图点阵大小(nXm)

比如原图100X100,缩放90%之后就是90X90点阵

2. 循环点阵,为每个点的颜色赋值

赋值方法取相关点颜色乘以相应权值累加除以权值和

原图

缩放为66.6%

计算每点值

Delphi代码如下

var

i,j:integer;

tmpColorR,tmpColorG,tmpColorB:dWord;

x,y:integer;

ScaleRate,ScaleRateX,ScaleRateY:real;

begin

//combobox1.text为缩放%

ScaleRate:=100/strtoFloatDef(combobox1.text,100);

//循环生成图像的点阵

for i:=0 to trunc(image1.Picture.Width/ScaleRate) do

for j:=0 to trunc(image1.Picture.height/ScaleRate) do

begin

tmpColorR:=0;

tmpColorG:=0;

tmpColorB:=0;

//为每个点累加相关节点的颜色

for x:=trunc(i*ScaleRate) to ceil(((i+1)*ScaleRate)-1) do

begin

for y:=trunc(j*ScaleRate) to ceil(((j+1)*ScaleRate)-1) do

begin

ScaleRateX:=Min(x+1,(i+1)*ScaleRate) - Max(x,i*ScaleRate);

ScaleRateY:=Min(y+1,(j+1)*ScaleRate) - Max(y,j*ScaleRate);

//取每个点的RGB值(如果是黑白或者灰度,只需要取得一位)

tmpColorR:=tmpColorR+trunc(ScaleRateX*ScaleRateY*(GetRValue(Image1.Canvas.Pixels[x,y])));

tmpColorG:=tmpColorG+trunc(ScaleRateX*ScaleRateY*(GetGValue(Image1.Canvas.Pixels[x,y])));

tmpColorB:=tmpColorB+trunc(ScaleRateX*ScaleRateY*(GetBValue(Image1.Canvas.Pixels[x,y])));

end;

end;

//为点赋值颜色

image2.Canvas.Pixels[i,j]:=RGB(trunc(tmpColorR/(ScaleRate*ScaleRate)),trunc(tmpColorG/(ScaleRate*ScaleRate)),trunc(tmpColorB/(ScaleRate*ScaleRate)));

end;

这个算法是我写的第一版本,还有很多优化余地,比如如果是黑白图像就不需要计算R G B,因为256级灰度全部是相同的

另外for循环中的表达式可能影像速度,还有用整数运算会比浮点快,等等。

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
>>返回首页<<
推荐阅读
 
 
频道精选
 
静静地坐在废墟上,四周的荒凉一望无际,忽然觉得,凄凉也很美
© 2005- 王朝网络 版权所有