图像处理 灰度的线性变换

Posted lipeng08

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了图像处理 灰度的线性变换相关的知识,希望对你有一定的参考价值。

灰度的线性变换

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 反相显示');

以上是关于图像处理 灰度的线性变换的主要内容,如果未能解决你的问题,请参考以下文章

图像处理 灰度的线性变换

图像灰度变换二值化直方图

图像增强---灰度变换

OpenCV——图像灰度变换

跟我学Python图像处理丨何为图像的灰度非线性变换

matlab 灰度变换函数