图像的点运算
所谓点运算,是指像素值(像素点的灰度值)通过运算之后,可以改善图像的显示效果。这是一种像素的逐点运算。
点运算又称为“对比度增强”、“对比度拉伸”,“灰度变换”(体现了点运算在哪些方面改变图片的显示效果)。
一.线性点运算
1.1 说明
![]()
1.2 示例
以lenna图像为例,点运算代码如下:
close all;
clear all;
I = imread('lenna.jpg');
I1 = 1.5 * I; %增强对比度
I2 = 0.8 * I; %减弱对比度
I3 = -1 * int8(I) + int8(255); %黑白反转
subplot(2, 2, 1), imshow(I), title('原始图像')
subplot(2, 2, 2), imshow(I1), title('对比度增强')
subplot(2, 2, 3), imshow(I2), title('对比度减弱')
subplot(2, 2, 4), imshow(I3), title('黑白反转')
处理后的图像显示如下:

二.非线性点运算
2.1 说明
非线性点运算对应于非线性映射函数,典型的映射包括平方函数,对数函数,截取(窗口函数),阈值函数,多值量化函数等。
2.2 示例
- 阈值化处理
阈值化处理是最常用的一种非线性运算,它的功能是选择一阈值,将图像二值化,用于图像分割及边缘跟踪等处理。
代码如下:
close all;
clear all;
I = imread('lenna.jpg');
T = mean2(I); %设定初始阈值
done = false;
while ~done
G = I > T;
Tnext = 0.5 * (mean(I(G)) + mean(I(~G)));
done = abs(T - Tnext) < 0.5;
T = Tnext;
end
G = im2bw(I, T/255); %根据确定的阈值进行图像二值分割
subplot(1, 2, 1), imshow(I), title('原始图像');
subplot(1, 2, 2), imshow(G), title('二值图像');
处理后的图像显示如下:

- 直方图均衡化
如果一副图像的像素占有很多的灰度级而且分布均匀,那么这样的图像往往有高对比度和多变的灰度色调。
代码如下:
clear all;
close all;
I = imread('lenna.jpg');
subplot(2, 2, 1), imshow(I), title('原始图像');
subplot(2, 2, 2), imhist(I);
G = histeq(I); % 灰度直方图的均衡化
subplot(2, 2, 3), imshow(G), title('直方图均衡化后图像');
subplot(2, 2, 4), imhist(G);
处理后的图像显示如下:
histeq的实现代码如下:
clear all;
close all;
I = imread('lenna.jpg');
I = im2double(I);
[M, N] = size(I);
[counts, x] = imhist(I); % counts:灰度值的个数,x:灰度值
location = find(counts ~= 0); % 找到所有像素个数不为0的灰度级位置
minCDF = min(counts(location)); % 找到像素数最少的灰度级
for i = 1 : length(location)
CDF = sum(counts(location(1 : i))); % 计算各个灰度级像素的累计分布
P = find(I == x(location(i))); % 找到灰度级所在位置
I(P) =(CDF - minCDF) / (M * N - minCDF); % 灰度变换公式
end
浙公网安备 33010602011771号