基于光学特征的图像分割

时间:2014-12-15 14:00:01

标签: matlab image-processing image-segmentation

我在第一张图片中显示的区域中有一些纹理。我想根据这个纹理分割图像。为此,我提取了如蓝色方块所示的特征(第二张图像)。我想提取绑定到特征的矩形分布的区域(用红色虚线表示)。

图片1: enter image description here

图片2: enter image description here

有人可以通过建议一些方法来解决这个问题。感谢

1 个答案:

答案 0 :(得分:1)

这看起来可能适合GraphCut图像分割框架:
你想找到每像素的二进制赋值(1 - 这个像素属于前景,0 - 像素是背景的一部分)。此分配应在前景中包含尽可能多的“纹理位置”,同时保留前景和背景之间的“平滑边界” 平滑度要求会阻止您的“理想”分配为蓝色点为1,其他地方为零。

现在,如何使用Matlab搜索这样的二进制赋值? 假设您img的大小为H - by - W,您已检测到纹理要素的位置,并将这些位置存储在2乘n矩阵中locs

设置每元素成本:

>> bgCost = zeros( H, W );
>> bgCost( [1 H] * (locs-1) + 1 ) = 1000; %// put 1000 penalty for assigning texture dot to foreground
>> fgCost = 10*ones( H, W ); %// assign some positive penalty for assigning non-texture location to FG - prevent an "all foreground" solution.
>> fgCost( [1 H] * (locs-1) + 1 ) = 0;

优化:

>> lambda = 5; %// set relative weight between smoothness term and "texture" term
>> gch = GraphCut('open', cat(3, fgCost,bgCost), lambda * [0 1;1 0], 
>> [gch BW] = GraphCut('expand', gch ); %//optimization
>> gch = GraphCut('close', gch ); %//cleanup

你应该在BW

中得到一个漂亮的二元掩码
>> figure;imshow( BW, [] );title('binary mask');

如果您对结果BW不满意,可以使用三个参数:

  • 您在背景中为纹理点指定的成本(此处设置为1000)。
  • 您分配给前景中非纹理像素的成本(此处设置为10)。
  • 平滑成本lambda的相对强度。

尝试并更改这些值,看看它们如何影响结果蒙版。

我使用this matlab wrapper进行GraphCut优化。