function intensity = GetIntensity(imgPath,binarizeStep,areaMax,areaMin,circularityMax,circularityMin) intensity = []; if exist(imgPath,'file') originalImage = imread(imgPath); originalImage = im2double(originalImage); adjustImage = medfilt2(originalImage); adjustImage(1,1) = adjustImage(2,2); adjustImage(1,end) = adjustImage(2,end-1); adjustImage(end,1) = adjustImage(end-1,2); adjustImage(end,end) = adjustImage(end-1,end-1); adjustImage = imadjust(adjustImage,stretchlim(adjustImage,0),[]); binaryImage = repmat(false,size(adjustImage)); for k = 1:binarizeStep bin = im2bw(adjustImage,(k-1)/binarizeStep); bin = imopen(bin,strel('disk',1)); props = regionprops(bwlabel(bin),'Area','Perimeter','PixelList'); for l = 1:length(props) if props(l).Area > areaMax || props(l).Area < areaMin || circularity(props(l).Area,props(l).Perimeter) > circularityMax || circularity(props(l).Area,props(l).Perimeter) < circularityMin bin(props(l).PixelList(:,2)+(props(l).PixelList(:,1)-1).*size(bin,1)) = false; end end binaryImage = binaryImage | bin; end props = regionprops(bwlabel(binaryImage),'Centroid','Area','Perimeter','BoundingBox'); for k = 1:length(props) if props(k).Area <= areaMax && props(k).Area >= areaMin && circularity(props(k).Area,props(k).Perimeter) <= circularityMax && circularity(props(k).Area,props(k).Perimeter) >= circularityMin originalSignalImage = originalImage(floor(props(k).BoundingBox(2))+1:floor(props(k).BoundingBox(2))+floor(props(k).BoundingBox(4)),floor(props(k).BoundingBox(1))+1:floor(props(k).BoundingBox(1))+floor(props(k).BoundingBox(3))); binarySignalImage = binaryImage(floor(props(k).BoundingBox(2))+1:floor(props(k).BoundingBox(2))+floor(props(k).BoundingBox(4)),floor(props(k).BoundingBox(1))+1:floor(props(k).BoundingBox(1))+floor(props(k).BoundingBox(3))); onImage = originalSignalImage(logical(binarySignalImage)); offImage = originalSignalImage(~logical(binarySignalImage)); back = sum(offImage(:))/sum(binarySignalImage(:)==0); if isnan(back) back = 0; end onImage = max(onImage-back,0); intensity(end+1) = sum(onImage(:)); end end end end % 円形度計算関数 function c = circularity(a,l) % 引数 % a: 面積 % l: 円周 c = 4.*pi.*a./l.^2; end