图像处理中的对比度拉伸变换
Contrast stretching transformation in Image Processing
Graph and Question
我试图用 matlab 找到问题的答案,但找不到。
我试过这个代码来解决这个问题。
我的代码块:
p1=[0,0];
p2=[75,5];
p3=[140,250];
p4=[255,255];
m1=(p1(1,2)-p2(1,2))/(p1(1,1)-p2(1,1));
m2=(p2(1,2)-p3(1,2))/(p2(1,1)-p3(1,1));
m3=(p3(1,2)-p4(1,2))/(p3(1,1)-p4(1,1));
c1=p1(1,2)-m1*p1(1,1);
c2=p2(1,2)-m2*p2(1,1);
c3=p3(1,2)-m3*p3(1,1);
% Transformation function
t=[];
for x=0:255
if(x<=p2(1,1))
t=[t (m1*x+c1)];
end
if(x>p2(1,1) && x<=p3(1,1))
t=[t (m2*x+c2)];
end
if(x>p3(1,1) && x<=p4(1,1))
t=[t (m3*x+c3)];
end
end
for n=1:s(1,1)
for m=1:s(1,2)
ot(n,m)=t(a(n,m)+1);
end
end
我不知道如何找到这个问题的答案。如果你能帮上忙,我会很高兴。
这里我将变换函数分成三个不同的区域,每个区域都有一个独特的斜率。通过计算相邻 x
值的差异 Run
和相邻 y
值的差异 Rise
来评估斜率。根据输入强度 r
下降的位置采用 if 语句的过程将决定使用哪个有效斜率。最后一步是添加每条直线的偏移量。找到 Effective_Run
是一个评估强度值下降到该区域多远的过程。这可以通过用强度值减去该区域的 x
下限来完成。这将取决于要点。对于区域 2,偏移量为 s1 = 30
,对于区域 3,偏移量为 s2 = 230
.
在括号中,每个区域的边界可以描述为:
区域 1:运行ge [0, r1]
区域 2:运行ge (r1, r2)
区域 3:运行ge [r2, 255]
请花时间检查逻辑和数学以确保以下代码没有错误:
r = input("Please input the intensity value, r: ");
fprintf("\n");
r1 = 70;
r2 = 150;
s1 = 30;
s2 = 230;
Point_1 = [0 0];
Point_2 = [r1 s1];
Point_3 = [r2 s2];
Point_4 = [255 255];
x = 1;
y = 2;
%Slope of region 1%
Rise = Point_2(y) - Point_1(y);
Run = Point_2(x) - Point_1(x);
Slope_1 = Rise/Run;
%Slope of region 2%
Rise = Point_3(y) - Point_2(y);
Run = Point_3(x) - Point_2(x);
Slope_2 = Rise/Run;
%Slope of region 3%
Rise = Point_4(y) - Point_3(y);
Run = Point_4(x) - Point_3(x);
Slope_3 = Rise/Run;
if r <= r1
fprintf("Region 1\n");
s = Slope_1*r;
fprintf("The output intensity, s = T(r) is: %.2f\n",s);
elseif (r1 < r) && (r < r2)
fprintf("Region 2\n");
Constant_Offset = s1;
Relative_Run = (r - r1);
s = Slope_2*Relative_Run + Constant_Offset;
fprintf("The output intensity, s = T(r) is: %.2f\n",s);
elseif r >= r2
fprintf("Region 3\n");
Constant_Offset = s2;
Relative_Run = (r - r2);
s = Slope_3*Relative_Run + Constant_Offset;
fprintf("The output intensity, s = T(r) is: %.2f\n",s);
end
运行 使用 MATLAB R2019b
Graph and Question
我试图用 matlab 找到问题的答案,但找不到。
我试过这个代码来解决这个问题。
我的代码块:
p1=[0,0];
p2=[75,5];
p3=[140,250];
p4=[255,255];
m1=(p1(1,2)-p2(1,2))/(p1(1,1)-p2(1,1));
m2=(p2(1,2)-p3(1,2))/(p2(1,1)-p3(1,1));
m3=(p3(1,2)-p4(1,2))/(p3(1,1)-p4(1,1));
c1=p1(1,2)-m1*p1(1,1);
c2=p2(1,2)-m2*p2(1,1);
c3=p3(1,2)-m3*p3(1,1);
% Transformation function
t=[];
for x=0:255
if(x<=p2(1,1))
t=[t (m1*x+c1)];
end
if(x>p2(1,1) && x<=p3(1,1))
t=[t (m2*x+c2)];
end
if(x>p3(1,1) && x<=p4(1,1))
t=[t (m3*x+c3)];
end
end
for n=1:s(1,1)
for m=1:s(1,2)
ot(n,m)=t(a(n,m)+1);
end
end
我不知道如何找到这个问题的答案。如果你能帮上忙,我会很高兴。
这里我将变换函数分成三个不同的区域,每个区域都有一个独特的斜率。通过计算相邻 x
值的差异 Run
和相邻 y
值的差异 Rise
来评估斜率。根据输入强度 r
下降的位置采用 if 语句的过程将决定使用哪个有效斜率。最后一步是添加每条直线的偏移量。找到 Effective_Run
是一个评估强度值下降到该区域多远的过程。这可以通过用强度值减去该区域的 x
下限来完成。这将取决于要点。对于区域 2,偏移量为 s1 = 30
,对于区域 3,偏移量为 s2 = 230
.
在括号中,每个区域的边界可以描述为:
区域 1:运行ge [0, r1]
区域 2:运行ge (r1, r2)
区域 3:运行ge [r2, 255]
请花时间检查逻辑和数学以确保以下代码没有错误:
r = input("Please input the intensity value, r: ");
fprintf("\n");
r1 = 70;
r2 = 150;
s1 = 30;
s2 = 230;
Point_1 = [0 0];
Point_2 = [r1 s1];
Point_3 = [r2 s2];
Point_4 = [255 255];
x = 1;
y = 2;
%Slope of region 1%
Rise = Point_2(y) - Point_1(y);
Run = Point_2(x) - Point_1(x);
Slope_1 = Rise/Run;
%Slope of region 2%
Rise = Point_3(y) - Point_2(y);
Run = Point_3(x) - Point_2(x);
Slope_2 = Rise/Run;
%Slope of region 3%
Rise = Point_4(y) - Point_3(y);
Run = Point_4(x) - Point_3(x);
Slope_3 = Rise/Run;
if r <= r1
fprintf("Region 1\n");
s = Slope_1*r;
fprintf("The output intensity, s = T(r) is: %.2f\n",s);
elseif (r1 < r) && (r < r2)
fprintf("Region 2\n");
Constant_Offset = s1;
Relative_Run = (r - r1);
s = Slope_2*Relative_Run + Constant_Offset;
fprintf("The output intensity, s = T(r) is: %.2f\n",s);
elseif r >= r2
fprintf("Region 3\n");
Constant_Offset = s2;
Relative_Run = (r - r2);
s = Slope_3*Relative_Run + Constant_Offset;
fprintf("The output intensity, s = T(r) is: %.2f\n",s);
end
运行 使用 MATLAB R2019b