function floyd = floyd_ht(image,mfilename)
[m,n]=size(image);
t=ones(m,n)/2;
e=zeros(m,n);
image=double(image);
for i=1:m
for j=1:n
lu = LU(i,j,e);
u = U(i,j,e);
ru = RU(i,j,e);
l = L(i,j,e);
aij = lu + u + ru + l;
fij = image(i,j)/255 - aij;
if fij < t(i,j) %t是阈值模板
floyd(i,j) = 0; % 0为黑
else
floyd(i,j) = 1;
end
e(i,j) = floyd(i,j) - fij;
end
end
imshow(floyd);
imwrite(floyd,'_floyd_halftone.bmp','bmp');
% 左上方给的误差
function y = LU(i,j,e) %e=zeros(m,n),e为量化误差矩阵,初始值为零
h = 1/16; % h是误差扩散核
if (i == 1 || j == 1)
y = 0;
else
y = h * e(i-1,j-1);
end
%上面给的误差
function y = U(i,j,e)
h = 5/16;
if (i == 1)
y = 0;
else
y = h * e(i-1,j);
end
不知道为什么不能贴全部代码,复制剩下的:
%右上方给的误差
function y = RU(i,j,e)
h = 3/16;
[~,N] = size(e);
if ( i == 1 || j == N)
y = 0;
else
y = h * e(i-1,j+1);
end
%左边给的误差
function y = L(i,j,e)
h = 7/16;
if ( j == 1)
y = 0;
else
y = h * e(i,j-1);
end
得出的结果是这样的:
想请问修改哪一步可以变成只显示一幅图?