下处理考虑以下代码:
因此,我们首先搜索图象和矫平由熵背景过滤
img=imread('http://i.stack.imgur.com/KMBRg.jpg');
%dimensions for neighbourhood are just a guess
cross_nhood = false(11,11); cross_nhood(:,6)=1;cross_nhood(6,:)=1;
img_ent = entropyfilt(img./255,repmat(cross_nhood,[1 1 3]));
img_ent_gray = rgb2gray(img_ent);
随后,我们发现使用哈里斯检测器角,选择4点:最左边的两个和两个最右边,并裁剪从而消除背景的图像(精度高达倾向)。我用r2011a,你可能有一点different functions,请参考MATLAB帮助
harris_pts = corner(img_ent_gray);
corn_pts = sortrows(harris_pts,1);
corn_pts = [corn_pts(1:2,:);...
corn_pts(size(corn_pts,1)-1:size(corn_pts,1),:)];
crop_img=img(min(corn_pts(:,2)):max(corn_pts(:,2)),...
min(corn_pts(:,1)):max(corn_pts(:,1)),:);
corn_pts(:,1)=corn_pts(:,1) - min(corn_pts(:,1));
corn_pts(:,2)=corn_pts(:,2) - min(corn_pts(:,2));
corn_pts = corn_pts + 1;
的这里有一个问题:角点之间的线路,在一个有点不同的角度倾斜。它可能既是角点检测又是图像捕捉的问题(客观失真和/或错误的采集角度)。没有直接的,永远正确的解决方案。我最好选择最大的倾斜角度(它会裁切图片),并开始逐行处理图像(使用Bresenham算法分割图像),直到任何或大部分,您可以选择,像素属于图片,而不是内部边界。可区分的特征可以是局部熵,颜色值的标准,特定的颜色阈值,不同的统计方法等等。
另一种方法是做颜色分割,我喜欢大多数革兰氏Shmidt正交或a*-b* color segmentation。但是,如果图像偏斜并且图片的一部分与边框的颜色相匹配(请参阅最后一张图片,左下角),则会出现同样的问题。
您的图片是否总有一种颜色背景? – Cecilia
不,实际上它的一种颜色,但它的一种渐变颜色,你可以在上一张图中看到 –