我想在每列中找到第一个和最后一个蓝色像素,然后找到之前实现的这一行内的另一个边界(第一个和最后一个蓝色像素行)。
我根据之前的回复者进行了更改,但现在我在尝试查找bif_first和last时遇到此错误:订阅的分配维度不匹配。 bif_first2(2,Z)= FIND(DX(:,Z)== 1,2, '第一');
有什么问题?请参阅下面的代码:
rgbImage_blue=zeros(size(movingRegistered));
lumen_first=zeros(1,size(movingRegistered,2)); lumen_last=zeros(1,size(movingRegistered,2)); bif_first=zeros(1,size(movingRegistered,2)); bif_last=zeros(1,size(movingRegistered,2)); bif_last2=zeros(2,size(movingRegistered,2)); bif_first2=zeros(2,size(movingRegistered,2));
blue=cat(3,0,0,255);
ix=all(bsxfun(@eq,movingRegistered,blue),3);% find all the blue pixels, and put them at 1 % logical array of where blue pixels are dx=[zeros(1,size(movingRegistered,2));diff(ix)]; % zeros to make the same number of columns and rows % the difference by row for all columns
nTops=sum(dx==1); % the transitions to blue
nBots=sum(dx==-1); % and from blue... % see if are consistent; if not, something's not right in image
if(nTops~=nBots), error('Mismatch in Top/Bottom'),end
for z=1:1:size(movingRegistered,2);
if nTops(1,z)==2; bifurcation=false;lumen=true; %only existis two boundaries no bifurcation
lumen_first(1,z)=find(ix(:,z)==1,1,'first');
lumen_last(1,z)=find(ix(:,z)==1,1,'last');
end
if nTops(1,z)>2;
bifurcation=true;
lumen_first(1,z)=find(ix(:,z)==1,1,'first');
lumen_last(1,z)=find(ix(:,z)==1,1,'last');
bif_first2(2,z)=find(dx(:,z)==1,2,'first');
bif_first(1,z)=bif_first2(2,z);
bif_last2(2,z)=find(dx(:,z)==1,2,'last');
bif_last(1,z)=bif_last2(2,z);
end
end
答案 0 :(得分:1)
您的问题是您正在将n * m * 3图像与3 * 1矢量进行比较。此操作未定义。
使用此代码:
blue=cat(3,0,0,250)
ix=all(bsxfun(@eq,movingRegistered,blue),3)
Matlab中的图像使用第三维颜色,这就是我创建blue
为1 * 1 * 3向量的原因。现在将此向量与图像进行比较,使用bsxfun扩展矢量以匹配图像大小。此操作单独比较每个颜色通道,因此all
用于收集所有三个通道的数据。