Tôi đang cố gắng thực hiện các thuật toán nhị phân khác nhau cho hình ảnh được hiển thị:
Đây là mã:
clc;
clear;
x=imread('n2.jpg'); %load original image
Bây giờ chúng tôi thay đổi kích thước hình ảnh để công việc tính toán trở nên dễ dàng hơn về sau đối với chúng tôi.
size(x);
x=imresize(x,[500 800]);
figure;
imshow(x);
title('original image');
z=rgb2hsv(x); %extract the value part of hsv plane
v=z(:,:,3);
v=imadjust(v);
% bây giờ chúng tôi tìm thấy độ lệch trung bình và độ lệch chuẩn cần thiết cho thuật toán niblack và% sauvola
m = mean(v(:))
s=std(v(:))
k=-.4;
value=m+ k*s;
temp=v;
% thực hiện thuật toán ngưỡng niblack:
for p=1:1:500
for q=1:1:800
pixel=temp(p,q);
if(pixel>value)
temp(p,q)=1;
else
temp(p,q)=0;
end
end
end
figure;
imshow(temp);
title('result by niblack');
k=kittlerMet(g);
figure;
imshow(k);
title('result by kittlerMet');
% thực hiện thuật toán ngưỡng sauvola:
val2=m*(1+.1*((s/128)-1));
t2=v;
for p=1:1:500
for q=1:1:800
pixel=t2(p,q);
if(pixel>value)
t2(p,q)=1;
else
t2(p,q)=0;
end
end
kết thúc
figure;
imshow(t2);
title('result by sauvola');
Kết quả tôi thu được là như sau:
Như bạn có thể thấy hình ảnh kết quả bị suy giảm tại các điểm tối hơn. Có ai đó vui lòng đề xuất cách tối ưu hóa kết quả của tôi không ??