二值化图像没有很好的效果

Binarization image does not have good effect

我在二值化图像时遇到问题:

图片中的walker二值化后丢失了。有人可以提供帮助吗?这是我使用的代码:

clc;
clear;
video = VideoReader('C:\Users\Small_Bird\Desktop\ch02_20170323193606~2.avi');
nFrames = video.NumberOfFrames;
H = video.Height;
W = video.Width;

Rate = video.Preallocate movie structure.

for frameNum = 3500:nFrames
     P = read(video,frameNum);
     grayImage=rgb2gray(P);
     cannyEdge=edge(grayImage,'canny');
     [m,n]=size(grayImage);
     for i=1:m
         for j=1:n
             if 1==cannyEdge(i,j)
                 h(i,j)=grayImage(i,j)+3;
             else 
                 h(i,j)=grayImage(i,j);
             end
         end
     end

     thresh=graythresh(h);
     I2=im2bw(h,thresh);   
     subplot(2,2,1);
     imshow(grayImage),title('original image');
     subplot(2,2,2);
     imshow(cannyEdge),title('image after extracting edge');
     subplot(2,2,3);
     imshow(h),title('image after strengthening edge');
     subplot(2,2,4);
     imshow(I2),title('image after binaryzation'); 
end

问题是 im2bw. You're using the function graythresh 计算整个图像的全局阈值的阈值选择,您的结果显示它只能成功地将图像的黑色部分与灰色或更高的部分分开的图像。您需要选择一个更高的阈值,可以是用于所有图像的绝对阈值,也可以是根据每张图像的某些特征计算得出的阈值。

如果您有 MATLAB 版本 R2016a 或更高版本,您可以选择使用 adaptthresh or im2binarize (the replacement for the im2bw function in newer versions) using the 'adaptive' method 计算局部自适应阈值。这可能会给您带来比简单的全局阈值更好的结果。