Is there any way to make this code faster?
이전 댓글 표시
Hi, I have this code that tosses out pixels from a cc list
for i = 1:cc.NumObjects
for j = length(cc.PixelIdxList{i}):-1:1
ind = cc.PixelIdxList{i}(j);
if ~imdiff(ind) || ~imcombined(ind)
cc.PixelIdxList{i}(j) = [];
end
end
end
imdiff and imcombined are both images. The code at the moment takes quite a while to churn through a decent sized image. Is there any way to make this code run faster?
채택된 답변
추가 답변 (1개)
Sean de Wolski
2012년 7월 17일
편집: Sean de Wolski
2012년 7월 17일
That whole thing should be vectorizable assuming imdiff and imcombined (whatever those are) can handle it:
cellfun(@(c)c(imdiff(c)&imcombined(c)),CC.PixelIdxList,'uni',false)
댓글 수: 3
C.J. Harris
2012년 7월 17일
Hmm.. is there any point using cellfun here? Does it increase speed or readability? At least in 2006b I find very few circumstances where cellfun gives improved performance over a simple loop.
Sean de Wolski
2012년 7월 17일
No. I just like it :)
You could keep the outer for-loop just as easily. The point is that the inner for-loop does not need to check each value if imdiff and imcombined are either images or functions that can be passed vector inputs.
Qingyang
2012년 7월 17일
카테고리
도움말 센터 및 File Exchange에서 Mathematics에 대해 자세히 알아보기
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!