图像的点运算——Matlab实现

图像的点运算——Matlab实现

文章目录

  • 图像的点运算——Matlab实现
    • 一、线性点运算
    • 二、非线性点运算

一、线性点运算

定义: 线性点运算的灰度变换函数形式可以采用线性方程描述 即==> s = ar + b 的形式

分析:方程中r代表像素 点 灰度值的输入,而s代表像素 点 的输出。 a代表斜率,用于调节对比度,而b代表截距,这两个参数就能够改变从输入到输出的映射关系 。 由于成像设备以及图像记录设备的动态范围太窄等因素,会导致图像曝光不足或者曝光过度,这时可以通过点运算将灰度图像的线性范围进行拓展

  1. 若a=1,且b=0,则只是简单的输出图像,无其他操作。但当a=0且b≠0时,操作结果是仅使得所有像素的灰度值上移或下移,即使得整个图像变得更亮或者更暗。
  2. 若a>1,则输出图像的对比度增大(灰度值范围增大)。
  3. 若0对比度降低(灰度值范围减小)。
  4. 若a<0,即a为负值,则图像反色,暗区域将变亮,亮区域将变暗,即点运算完成了图像求补。
  5. b 是一个平移项,对图像的整个灰度值进行平移,用于控制图像亮度

Matlab代码实现

%% 实验点运算,实现图像对比度的改变
clc;clear;close all;    % 初始化
I=imread('eight.tif');  % 读入一幅图像
I=im2double(I); % 转换数据类型为double
subplot(231);imshow(I);title('原图');
%% 增加对比度并显示
a=2;b=-50;  % 增加对比度
O=a.*I+b/255;
subplot(232);imshow(O);title('a=2;b=-50,增加对比度');

%% 降低对比度并显示
a=0.5;b=-50;    %降低对比度
O=a.*I+b/255;
subplot(233);imshow(O);title('a=0.5;b=-50,降低对比度');

%% 线性增加亮度
a=1;b=50;
O=a.*I+b/255;
subplot(234);imshow(O);title('a=1;b=50,线性平移增加亮度');

%% 线性降低亮度
a=1;b=-50;
O=a.*I+b/255;
subplot(235);imshow(O);title('a=1;b=-50,线性平移降低亮度');

%% 图像反色
a=-1;b=255;
O=a.*I+b/255;
subplot(236);imshow(O);title('a=-1;b=255,图像反色');

运行结果如下:
图像的点运算——Matlab实现_第1张图片

二、非线性点运算

除了线性点运算之外,还有非线性点运算。 非线性点运算是指输出灰度级与输人灰度级成非线性函数关系。 常见的非线性灰度变换为对数变换和幂次变换。

  1. 对数变换

对数变换的一般表达式为:
s = c log ⁡ ( 1 + r ) s=c\log(1+r) s=clog(1+r)
其中c是一个常数,这种变换使窄带灰度输入图像值映射为宽带输出值。对数变换可以将输入的一个小范围地灰度值映射到较大范围的输出值。

  1. 幂次变换

幂次变换的一般形式为: s = c r γ s=cr^γ s=crγ,其中c和γ为正常数。
图像的点运算——Matlab实现_第2张图片
当0<γ<1时:加亮、减暗图像

当γ>1时:加暗、减亮图像

利用matlab实现c=1,γ分别为0.5、1和1.5时对图像进行变换:

%% 实现对图像的非线性点运算的幂次变换
% 幂次变换 s=cr^γ  c=1,γ分别为0.5、1和1.5时对图像进行变换
clc;clear;close all;    % 初始化
I=imread('pout.tif');
subplot(221);imshow(I);title('原图');
subplot(222);imshow(imadjust(I,[],[],0.5));title('γ=0.5');
subplot(223);imshow(imadjust(I,[],[],1));title('γ=1');
subplot(224);imshow(imadjust(I,[],[],1.5));title('γ=1.5');

运行结果如下:
图像的点运算——Matlab实现_第3张图片

你可能感兴趣的:(Matlab,matlab,图像处理,开发语言)