图像处理 灰度的线性变换

灰度的线性变换

Db = f(Da) = k*Da +b   k为斜率,b为y轴交点截距,Da为输入图像的灰度,Db为输出图像的灰度

三个有趣的结论,相信会对灰度变换的理解更加深刻:

1,k> 1增加对比度,k<1减小对比度

2,k=1改变亮度

3,k=1,b=0保持原来图像,k=-1,b=255,原图像反转


以下讲述线性变换的代码的步骤:

1,判断参数是否是8位图像

2,对像素的所有点执行线性变换

3,对执行完像素变换的灰度值进行合法性分析,对不合法的数据强制合法

4,对图片的原来坐标的所有点设置新的灰度值。


以下代码转载自数字图像与机器视觉一书:

所有的代码我都亲自测试了,感觉不是很难,后面的可能会越来越难,先一点点啃吧。

BOOL CImgProcess::LinTranLP(CImgProcess* pTo, double dFa, double dFb)
{
if(m_pBMIH->biBitCount != 8) return false;


BYTE bGray,target;
for(int i = 0; i < m_pBMIH->biHeight; ++i)
{
for(int j = 0; j < m_pBMIH->biWidth; ++j)
{
bGray = GetGray(j,i);
target = dFa * bGray + dFb;
if(target < 0)
target = 0;
if(target > 255)
target = 255;
pTo->SetPixel(j, i, target);
}
}
return TRUE;
}

下面是采用的matlab的代码:

I = imread('coins.png'); % 读入原图像


I = im2double(I); % 转换数据类型为double
[M,N] = size(I); % 计算图像面积


figure(1); % 打开新窗口
imshow(I); % 显示原图像
title('原图像');


figure(2); % 打开新窗口
[H,x] = imhist(I, 64); % 计算64个小区间的灰度直方图
stem(x, (H/M/N), '.'); % 显示原图像的直方图
title('原图像');


% 增加对比度
Fa = 2; Fb = -55;
O = Fa * I + Fb/255;


figure(3);
subplot(2,2,1);
imshow(O);
title('Fa = 2 Fb = -55 增加对比度');


figure(4);
subplot(2,2,1);
[H,x] = imhist(O, 64);
stem(x, (H/M/N), '.');
title('Fa = 2 Fb = -55 增加对比度');


% 减小对比度
Fa = 0.5; Fb = -55;
O = Fa * I + Fb/255;


figure(3);
subplot(2,2,2);
imshow(O);
title('Fa = 0.5 Fb = -55 减小对比度');


figure(4);
subplot(2,2,2);
[H,x] = imhist(O, 64);
stem(x, (H/M/N), '.');
title('Fa = 0.5 Fb = -55 减小对比度');


% 线性增加亮度
Fa = 1; Fb = 55;
O = Fa * I + Fb/255;


figure(3);
subplot(2,2,3);
imshow(O);
title('Fa = 1 Fb = 55 线性平移增加亮度');


figure(4);
subplot(2,2,3);
[H,x] = imhist(O, 64);
stem(x, (H/M/N), '.');
title('Fa = 1 Fb = 55 线性平移增加亮度');


% 反相显示
Fa = -1; Fb = 255;
O = Fa * I + Fb/255;


figure(3);
subplot(2,2,4);
imshow(O);
title('Fa = -1 Fb = 255 反相显示');


figure(4);
subplot(2,2,4);
[H,x] = imhist(O, 64);
stem(x, (H/M/N), '.');
title('Fa = -1 Fb = 255 反相显示');

  • 0
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值