公式
函数表达式如下:
f
(
x
)
=
{
y
1
x
/
x
1
,
x
<
x
1
(
y
2
−
y
1
)
(
x
−
x
1
)
/
(
x
2
−
x
1
)
+
y
1
,
x
1
⩽
x
⩽
x
2
(
255
−
y
2
)
(
x
−
x
2
)
/
(
255
−
x
2
)
+
y
2
,
x
>
x
2
f(x)=\left\{\begin{matrix} y_{1}x/x_{1} ,& x<x_{1}\\ (y_{2}-y_{1})(x-x_{1})/(x_{2}-x_{1})+y_{1}, & x_{1}\leqslant x\leqslant x_{2}\\ (255-y_{2})(x-x_{2})/(255-x_{2})+y_{2}, & x>x_{2} \end{matrix}\right.
f(x)=⎩
⎨
⎧y1x/x1,(y2−y1)(x−x1)/(x2−x1)+y1,(255−y2)(x−x2)/(255−x2)+y2,x<x1x1⩽x⩽x2x>x2
(
x
1
,
y
1
)
(x1,y1)
(x1,y1)和
(
x
2
,
y
2
)
(x2,y2)
(x2,y2)是图中两个转折点坐标。
源代码
clc
image = imread('D:\2.png');
image_matrix=image(:,:,1);
image_matrix=double(image_matrix);
[height,width,channels]=size(image);
G=zeros(height,width);
%设定的坐标点
x1=130;
x2=150;
y1=50;
y2=200;
%灰度映射表,灰度在0到255之间
gray_map = zeros(1,256);
%计算灰度映射表
for i=1:x1 %先判断0到x1区间内的
if(x1>0)
gray_map(i)=y1*i/x1;
else
gray_map(i)=0;
end
end
for i=x1+1:x2 %判断x1到x2区间内的
if(x2~=x1)
gray_map(i)=(y2-y1)*(i-x1)/(x2-x1)+y1;
else
gray_map(i)=y1;
end
end
for i=x1+1:x2 %判断x1到x2区间内的
if(x2~=x1)
gray_map(i)=(y2-y1)*(i-x1)/(x2-x1)+y1;
else
gray_map(i)=y1;
end
end
for i=x2+1:256 %判断x2到255区间内的
if(x2~=255)
gray_map(i)=(255-y2)*(i-x2)/(255-x2)+y2;
else
gray_map(i)=255;
end
end
for i=1:height
for j=1:width
T = image_matrix(i,j);
if(T==0)
G(i,j)=gray_map(1);
else
G(i,j)=gray_map(T);
end
end
end
image_out = uint8(G);
%显示
subplot(1,2,1);
imshow(image);
subplot(1,2,2);
imshow(image_out);
效果图
固定阈值法公式
固定阈值法就是为灰度图像
f
f
f设定一个阈值
T
T
T,把灰度值小于给定阈值
T
T
T的像素置于0,大于阈值
T
T
T的像素置为255,从而对灰度图像实现二值化变换:
f
(
x
)
=
{
0
,
x
<
T
255
,
x
>
T
}
f(x)=\begin{Bmatrix} 0,& x<T\\ 255, & x>T \end{Bmatrix}
f(x)={0,255,x<Tx>T}
源代码
clc
image = imread('D:\2.png');
image_matrix=image(:,:,1);
image_matrix=double(image_matrix);
[height,width,channels]=size(image);
%设定的阈值
threshold = 100;
for i=1:height
for j=1:width
if(image_matrix(i,j)>= threshold)
image_matrix(i,j) = 255;
else
image_matrix(i,j) = 0;
end
end
end
image_out = uint8(image_matrix);
%显示
subplot(1,2,1);
imshow(image);
subplot(1,2,2);
imshow(image_out);
效果图
双固定阈值法公式
双固定阈值法预先设置了两个阈值
T
1
T_{1}
T1和
T
2
T_{2}
T2对图像的像素值灰度变换:
f
(
x
)
=
{
0
,
x
⩽
T
1
255
,
T
1
<
x
<
T
2
0
,
x
⩾
T
2
f(x)=\left\{\begin{matrix} 0, & x\leqslant T_{1}\\ 255, & T_{1}<x<T_{2}\\ 0, &x\geqslant T_{2} \end{matrix}\right.
f(x)=⎩
⎨
⎧0,255,0,x⩽T1T1<x<T2x⩾T2
源代码
clc
image = imread('D:\2.png');
image_matrix=image(:,:,1);
image_matrix=double(image_matrix);
[height,width,channels]=size(image);
%设定的阈值
threshold_one = 100;
threshold_two = 150;
for i=1:height
for j=1:width
if(image_matrix(i,j)>=threshold_one && image_matrix(i,j)<=threshold_two)
image_matrix(i,j)=255;
else
image_matrix(i,j)=0;
end
end
end
image_out = uint8(image_matrix);
%显示
subplot(1,2,1);
imshow(image);
subplot(1,2,2);
imshow(image_out);