怎样给一幅黑白的BMP图像加上伪彩(彩色)?
解决方案 »
- DELPHI 怎么判断SQL是否有存放图片?
- update多个字段
- 如何在fastreport中在调用自定义函数?
- ■■我想写一个自动点击广告的程序,请问如何在程序中打开网页?
- 为什么老是提示:adoquery1:can not perform this operation in an open dataset???
- 如何做到按用途分类打印并统计?
- 我的程序要拷到别人的机器上用,需要什么哪些文件
- 用 table1 一连就要身份和 密码,是不是我bde设置不对paradox和access一样么?
- Delphi截图问题!!!
- 急,RX控件 求助!!PrintPageType Property doesn't exist---RXlib for D5(RxDBGrid)
- 程序过长,需要转行,其转行符是什么?
- 女友出的问题,答不出来不能见面,在线求救??????????????
它把离散的黑白图像F(j,k)的不同灰度级按照线性或者非线性映射成不同彩色。可以提高图像内容的可辨识度。
最简单的伪彩色图像增强技术是强度分层,它也是操作最简便的。
算法如下
1。把F(j,k)看成是一个二维强度函数,用m个平行水平面的切割平面作切割,会得到m个不同的灰度区间L1,L2...Lm。可以是均匀分层过程。当然你也可以做非等间隔分层,把你关心的灰度级区间分的密一些,其他区间分的稀疏一些。层次越多细节越丰富彩色越柔和。2。把图像灰度F(j,k)同时送入具有不同特性的红绿蓝三个变换器。产生由变换函数调制的三基色分量R(j,k),G(j,k),B(j,k),这三个分量就能确定F(j,k)的颜色。
也就是不同灰度级对应着不同的R,G,B分量。根据灰度级所在的区间确定它的颜色
RedValue, GreenValue, BlueValue: integer;///要变换颜色的rgb的值
p0:pbytearray;
Gray,r,g,b,x,y,GrayMax: Integer;
begin
RedValue := getrvalue(cweicai.SelectionColor);
GreenValue :=getgvalue(cweicai.SelectionColor);
BlueValue := getbvalue(cweicai.SelectionColor);//得到要变换的rgb值
graymax:=0;
for y:=0 to imgpic.Picture.Bitmap.Height-1 do
begin
p0:=imgpic.Picture.Bitmap.scanline[y];
for x:=0 to imgpic.Picture.Bitmap.Width-1 do
begin
Gray:=Round(p0[x*3]*0.3+p0[x*3+1]*0.59+p0[x*3+2]*0.11);
if GrayMax<gray then graymax:=gray;
end;
end;////////////////////////////这里graymax得到图象上最大灰度的点灰度 for y:=0 to imgpic.Picture.Bitmap.Height-1 do
begin
p0:=imgpic.Picture.Bitmap.scanline[y];
for x:=0 to imgpic.Picture.Bitmap.Width-1 do
begin
Gray:=Round(p0[x*3+2]*0.3+p0[x*3+1]*0.59+p0[x*3]*0.11);
p0[x*3]:=round(RedValue*Gray/GrayMax); /////////
p0[x*3+1]:=round(GreenValue*Gray/GrayMax);//具体算法
p0[x*3+2]:=round(BlueValue*Gray/GrayMax);//////
end;
end;////////////这段给图象上假彩色
imgpic.Repaint;