如何找到分支某些像素的方向?
How find orientation of certain pixels of branches?
使用此代码(为问题创建)我向您展示了我的问题示例,其中 I
是一对 0 和 1 的矩阵。您说得到的图像代表两个 "branches" 的骨架。如您所见,两个分支的某些像素似乎处于同一方向。我想要做的是将每个分支的三个像素乘三个像素并比较它们的方向(角度),如果我们得到两个分支的相同方向然后填充 space 将像素与 1[=12 分开=]
I=zeros(20,20);
I(1,15)=1; I(2,14)=1; I(3,13)=1; I(1,16)=1;
I(4,12)=1;
I(7,9)=1;
I(8,8)=1;
I(9,7)=1;
I(9,6)=1;
I(9,5)=1;
I(10,4)=1;
CC=bwconncomp(I);
I=labelmatrix(CC); %Labeling of branches
imagesc(I) % figure of problem
I(5,11)=1;
I(6,10)=1;
figure, imagesc(I) % figure of solution that I search
我比较了每条分支边的一次多项式系数:
% generate branches image
I=zeros(20,20);
I(1,15)=1; I(2,14)=1; I(3,13)=1; I(1,16)=1;
I(4,12)=1;
I(7,9)=1;
I(8,8)=1;
I(9,7)=1;
I(9,6)=1;
I(9,5)=1;
I(10,4)=1;
% find connected components
CC=bwconncomp(I);
% get xy coords of connected components
[Y,X] = cellfun(@(ind) ind2sub(size(I),ind),CC.PixelIdxList,'UniformOutput',0);
% get 1st degree polynomial coeffs for each component edges
p1 = cellfun(@(x,y) polyfit(x(1:2),y(1:2),1),X,Y,'UniformOutput',0);
p2 = cellfun(@(x,y) polyfit(x(end-1:end),y(end-1:end),1),X,Y,'UniformOutput',0);
% compare polynomial coefficients
D = pdist2(cell2mat(p1'),cell2mat(p2'));
% find "close" coefficient values
D = D + eye(size(D));
EPS = 1e-3;
[idx1,idx2] = find(D < EPS);
A = zeros(size(I));
[xg,yg] = meshgrid(1:20);
for ii = 1:numel(idx1)
% chosen poly coeffs
p = p1{idx1(ii)};
% relevant xy values
yy = polyval(p,xg);
xx = [X{idx1(ii)}(1)+1:X{idx2(ii)}(end)-1 X{idx2(ii)}(end)+1:X{idx1(ii)}(1)-1];
% fill missing pixels
A = A + (CC.NumObjects + 1 + ii)*((abs(yy - yg) < EPS) & ismember(xg,xx));
end
subplot(121);
I = labelmatrix(CC); %Labeling of branches
imagesc(I) % figure of problem
subplot(122);
I2 = double(I) + A;
imagesc(I2) % figure of solution that I search
使用此代码(为问题创建)我向您展示了我的问题示例,其中 I
是一对 0 和 1 的矩阵。您说得到的图像代表两个 "branches" 的骨架。如您所见,两个分支的某些像素似乎处于同一方向。我想要做的是将每个分支的三个像素乘三个像素并比较它们的方向(角度),如果我们得到两个分支的相同方向然后填充 space 将像素与 1[=12 分开=]
I=zeros(20,20);
I(1,15)=1; I(2,14)=1; I(3,13)=1; I(1,16)=1;
I(4,12)=1;
I(7,9)=1;
I(8,8)=1;
I(9,7)=1;
I(9,6)=1;
I(9,5)=1;
I(10,4)=1;
CC=bwconncomp(I);
I=labelmatrix(CC); %Labeling of branches
imagesc(I) % figure of problem
I(5,11)=1;
I(6,10)=1;
figure, imagesc(I) % figure of solution that I search
我比较了每条分支边的一次多项式系数:
% generate branches image
I=zeros(20,20);
I(1,15)=1; I(2,14)=1; I(3,13)=1; I(1,16)=1;
I(4,12)=1;
I(7,9)=1;
I(8,8)=1;
I(9,7)=1;
I(9,6)=1;
I(9,5)=1;
I(10,4)=1;
% find connected components
CC=bwconncomp(I);
% get xy coords of connected components
[Y,X] = cellfun(@(ind) ind2sub(size(I),ind),CC.PixelIdxList,'UniformOutput',0);
% get 1st degree polynomial coeffs for each component edges
p1 = cellfun(@(x,y) polyfit(x(1:2),y(1:2),1),X,Y,'UniformOutput',0);
p2 = cellfun(@(x,y) polyfit(x(end-1:end),y(end-1:end),1),X,Y,'UniformOutput',0);
% compare polynomial coefficients
D = pdist2(cell2mat(p1'),cell2mat(p2'));
% find "close" coefficient values
D = D + eye(size(D));
EPS = 1e-3;
[idx1,idx2] = find(D < EPS);
A = zeros(size(I));
[xg,yg] = meshgrid(1:20);
for ii = 1:numel(idx1)
% chosen poly coeffs
p = p1{idx1(ii)};
% relevant xy values
yy = polyval(p,xg);
xx = [X{idx1(ii)}(1)+1:X{idx2(ii)}(end)-1 X{idx2(ii)}(end)+1:X{idx1(ii)}(1)-1];
% fill missing pixels
A = A + (CC.NumObjects + 1 + ii)*((abs(yy - yg) < EPS) & ismember(xg,xx));
end
subplot(121);
I = labelmatrix(CC); %Labeling of branches
imagesc(I) % figure of problem
subplot(122);
I2 = double(I) + A;
imagesc(I2) % figure of solution that I search