0

对图像进行二值化时遇到问题:

在此处输入图像描述

图片中的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
4

1 回答 1

1

问题是阈值的选择im2bw。您正在使用该函数graythresh计算整个图像的全局阈值,您的结果显示该阈值仅成功地将图像的黑色部分与图像的灰色或更高部分分开。您需要选择一个更高的阈值,可以是用于所有图像的绝对阈值,也可以是根据每个图像的某些特征计算得出的阈值。

如果您有 MATLAB R2016a 或更高版本,您可以选择使用方法计算局部自适应阈值adaptthresh(在较新版本im2binarize中替换该im2bw函数)。这可能会给您比简单的全局阈值更好的结果。'adaptive'

于 2017-08-29T03:56:40.310 回答