将以下变换函数应用于灰度图像的程序
a program to apply the following transformation function to a grayscale image
我想将以下变换函数应用于灰度图像,我知道如何将其应用于以下函数,
我的问题是如何将程序应用于以下转换函数,
到目前为止的代码,
clear;
pollen = imread('Fig3.10(b).jpg');
u = double(pollen);
[nx ny] = size(u)
nshades = 256;
r1 = 80; s1 = 10; % Transformation by piecewise linear function.
r2 = 140; s2 = 245;
for i = 1:nx
for j = 1:ny
if (u(i,j)< r1)
uspread(i,j) = ((s1-0)/(r1-0))*u(i,j)
end
if ((u(i,j)>=r1) & (u(i,j)<= r2))
uspread(i,j) = ((s2 - s1)/(r2 - r1))*(u(i,j) - r1)+ s1;
end
if (u(i,j)>r2)
uspread(i,j) = ((255 - s2)/(255 - r2))*(u(i,j) - r2) + s2;
end
end
end
hist= zeros(nshades,1);
for i=1:nx
for j=1:ny
for k=0:nshades-1
if uspread(i,j)==k
hist(k+1)=hist(k+1)+1;
end
end
end
end
plot(hist);
pollenspreadmat = uint8(uspread);
imwrite(pollenspreadmat, 'pollenspread.jpg');
提前致谢
图中表示,对于介于 A
和 B
之间的任何强度,它们应设置为 C
。您所要做的就是修改两个 for
循环,以便对于 A
和 B
之间的任何值,将输出位置设置为 C
。我还假设范围是包容性的。您可以简单地删除第一个和最后一个 if
条件并使用中间的条件:
for i = 1:nx
for j = 1:ny
if ((u(i,j)>=r1) && (u(i,j)<= r2))
uspread(i,j) = C;
end
end
end
C
是您自己设置的常量。通常对于分割,这个结果非常高,可以区分前景和背景。你这里有一张 uint8
图片,所以 C = 255;
可以。
但是,我建议您实现更加矢量化的解决方案。避免 for
循环并改用 logical
索引:
uspread = u;
uspread(u >= r1 & u <= r2) = C;
我想将以下变换函数应用于灰度图像,我知道如何将其应用于以下函数,
我的问题是如何将程序应用于以下转换函数,
到目前为止的代码,
clear;
pollen = imread('Fig3.10(b).jpg');
u = double(pollen);
[nx ny] = size(u)
nshades = 256;
r1 = 80; s1 = 10; % Transformation by piecewise linear function.
r2 = 140; s2 = 245;
for i = 1:nx
for j = 1:ny
if (u(i,j)< r1)
uspread(i,j) = ((s1-0)/(r1-0))*u(i,j)
end
if ((u(i,j)>=r1) & (u(i,j)<= r2))
uspread(i,j) = ((s2 - s1)/(r2 - r1))*(u(i,j) - r1)+ s1;
end
if (u(i,j)>r2)
uspread(i,j) = ((255 - s2)/(255 - r2))*(u(i,j) - r2) + s2;
end
end
end
hist= zeros(nshades,1);
for i=1:nx
for j=1:ny
for k=0:nshades-1
if uspread(i,j)==k
hist(k+1)=hist(k+1)+1;
end
end
end
end
plot(hist);
pollenspreadmat = uint8(uspread);
imwrite(pollenspreadmat, 'pollenspread.jpg');
提前致谢
图中表示,对于介于 A
和 B
之间的任何强度,它们应设置为 C
。您所要做的就是修改两个 for
循环,以便对于 A
和 B
之间的任何值,将输出位置设置为 C
。我还假设范围是包容性的。您可以简单地删除第一个和最后一个 if
条件并使用中间的条件:
for i = 1:nx
for j = 1:ny
if ((u(i,j)>=r1) && (u(i,j)<= r2))
uspread(i,j) = C;
end
end
end
C
是您自己设置的常量。通常对于分割,这个结果非常高,可以区分前景和背景。你这里有一张 uint8
图片,所以 C = 255;
可以。
但是,我建议您实现更加矢量化的解决方案。避免 for
循环并改用 logical
索引:
uspread = u;
uspread(u >= r1 & u <= r2) = C;