1 计算原理
一种 clamp 操作,然后将一定范围内的intensity线性拉伸到某个指定区间。
记某像素点的值为p,对各像素点做以下操作:
f
(
p
)
=
{
a
p
<
a
M
p
−
a
b
−
a
a
≤
p
≤
b
M
p
>
b
f(p)= \begin{cases} a& {p < a}\\ M\dfrac{p - a}{b - a} & {a \leq p \leq b}\\ M& {p > b} \end{cases}
f(p)=⎩⎪⎪⎨⎪⎪⎧aMb−ap−aMp<aa≤p≤bp>b
则将图像window在
[
a
,
b
]
[a, b]
[a,b] 内,最大intensity为
M
M
M .
2 代码实现
%% reading in the image
orgIMG = rgb2gray(imread("lena.jpg"));
figure(1);
subplot(1,2,1);
imshow(orgIMG);
title("Original IMG");
subplot(1,2,2);
imhist(orgIMG);
axis([0 255 0 800]);
title("The Histogram of the original img");
%% Doing intensity windowing
% Define parameters
a_min = 20; % a_min <- 0~a_max
a_max = 220; % a_max <- a_min~255
M = 220; % intensity
orgIMG = double(orgIMG);
smaller = find(orgIMG <= a_min);
larger = find(orgIMG >= a_max);
middle = find(orgIMG > a_min & orgIMG < a_max);
orgIMG(smaller) = a_min;
orgIMG(larger) = M;
orgIMG(middle) = M.*(orgIMG(middle)-a_min)./(a_max-a_min);
orgIMG = uint8(orgIMG);
%% Draw the new img
figure(2);
subplot(1,2,1);
imshow(orgIMG);
title("Modified IMG");
subplot(1,2,2);
imhist(orgIMG);
axis([0 255 0 800]);
title("The Histogram of the Modified img");
3 效果展示
原图:
[
a
,
b
]
=
[
20
,
220
]
,
M
=
220
:
[a, b] = [20, 220], M = 220:
[a,b]=[20,220],M=220:
4 源码下载
源码下载地址:点击此处