使用 MATLAB 着色半色调



我无法使用带有误差扩散方法的matlab制作彩色半色调图像,即原始输入图像被分解为三种颜色(青色,品红色和黄色),然后每种颜色将转换为半色调图像,就像这张图片一样。

我一直在寻找,我找到了灰度图像的贾维斯误差扩散方法:

function outImg = jarvisHalftone(inImg)
inImg = double(inImg);
[M,N] = size(inImg);
T = 127.5;
y = inImg;
error = 0;
y= [127.5*ones(M,2) y 127.5*ones(M,2) ; 127.5*ones(2,N+4)];
z = y;
for rows = 1:M
for cols = 3:N+2
z(rows,cols) =255*(y(rows,cols)>=T);
error = -z(rows,cols) + y(rows,cols);
y(rows,cols+2) = 5/48 * error + y(rows,cols+2);
y(rows,cols+1) = 7/48 * error + y(rows,cols+1);
y(rows+1,cols+2) = 3/48 * error + y(rows+1,cols+2);
y(rows+1,cols+1) = 5/48 * error + y(rows+1,cols+1);
y(rows+1,cols+0) = 7/48 * error + y(rows+1,cols+0);
y(rows+1,cols-1) = 5/48 * error + y(rows+1,cols-1);
y(rows+1,cols-2) = 3/48 * error + y(rows+1,cols-2);
y(rows+2,cols+2) = 1/48 * error + y(rows+2,cols+2);
y(rows+2,cols+1) = 3/48 * error + y(rows+2,cols+1);
y(rows+2,cols+0) = 5/48 * error + y(rows+2,cols+0);
y(rows+2,cols-1) = 3/48 * error + y(rows+2,cols-1);
y(rows+2,cols-2) = 1/48 * error + y(rows+2,cols-2);
end
end
outImg = z(1:M,3:N+2);
outImg = im2bw(uint8(outImg));

但它不适用于彩色图像。我该怎么办?

您是否尝试过使用 http://users.ece.utexas.edu/~bevans/projects/halftoning/toolbox/中的半色调图像工具箱

然而,一般来说,半色调是一次一个颜色平面完成的。 在屏幕半色调的情况下,您通常会为每个颜色设置一个屏幕。 但是,在您的情况下,您似乎想要一个 FM 屏幕,在这种情况下,您可以为每个颜色平面使用相同的算法。

假设您的 jarvisHalftone 例程适用于灰度图像,那么您可以使用以下内容创建颜色半色调方法:

function outImg = jarvisColorHalftone(inImg)
[N,M,P] = size(inImg);
outImg = logical(zeros([N,M,P]));
for p = 1:P
  outImg(:,:,p) = jarvisHalftone(inImg(:,:,p));

最新更新