Skip to content

Commit

Permalink
Corrections to box filt radius, padding
Browse files Browse the repository at this point in the history
  • Loading branch information
aditiiyer committed Sep 11, 2024
1 parent 9a5f051 commit fbd9268
Show file tree
Hide file tree
Showing 2 changed files with 26 additions and 16 deletions.
11 changes: 4 additions & 7 deletions cerr/utils/image_proc.py
Original file line number Diff line number Diff line change
Expand Up @@ -128,7 +128,7 @@ def resizeScanAndMask(scan3M, mask4M, gridS, outputImgSizeV, method, \

xOutV = np.arange(xV[0] - (xPad/2)*voxSizeV[0],
xV[-1]+(xPad/2)*voxSizeV[0], voxSizeV[0])
yOutV = np.arange(yV[0] - (yPad/2)*voxSizeV[1], \
yOutV = np.arange(yV[0] - (yPad/2)*voxSizeV[1],
yV[-1]+(yPad/2)*voxSizeV[1], voxSizeV[1])
zOutV = zV

Expand Down Expand Up @@ -289,12 +289,9 @@ def resizeScanAndMask(scan3M, mask4M, gridS, outputImgSizeV, method, \
maskOut4M[rMin:rMax+1, cMin:cMax+1, slcNum, :] = mask4M[outRmin:outRmax+1,\
outCmin:outCmax+1, slcNum, :]
# Return co-ordinates of cropped region
xOutM[:, slcNum] = np.arange(xV[outCmin, slcNum],
xV[outCmax, slcNum] + voxSizeV[0], voxSizeV[0] + EPS)
yOutM[:, slcNum] = np.arange(yV[outRmin, slcNum],
yV[outRmax, slcNum] + voxSizeV[1], voxSizeV[1] - EPS)

gridOutS = (xOutM, yOutM, zV)
xOutM[:, slcNum] = np.arange(xV[outCmin], xV[outCmax] + voxSizeV[0], voxSizeV[0] + EPS)
yOutM[:, slcNum] = np.arange(yV[outRmin], yV[outRmax] + voxSizeV[1], voxSizeV[1] - EPS)
gridOutS = (xOutM, yOutM, zV)

elif methodLower in ['bilinear','bicubic','nearest']:
#3D resizing. TBD: 2D
Expand Down
31 changes: 22 additions & 9 deletions cerr/utils/mask.py
Original file line number Diff line number Diff line change
Expand Up @@ -191,29 +191,42 @@ def blurring(binaryMask, sigmaVox, filtType='gaussian'):
Args:
binaryMask (numpy.array): Binary mask to blur.
sigmaVox (float): Sigma for Gaussian in units of voxels.
sigmaVox (float): Sigma for Gaussian OR filter radius for box filter (in units of voxels).
filtType (string): [optional, default:'gaussian'] 'gaussian' or 'box' smoothing filter.
Returns:
numpy.ndarray(dtype=bool): Blurred mask using Gaussian blur with input sigma.
"""

origSize = binaryMask.shape
binaryMaskImg = sitk.GetImageFromArray(binaryMask.astype(int))
padded = False

if filtType == 'gaussian':
filter = sitk.SmoothingRecursiveGaussianImageFilter()
filter.SetSigma(sigmaVox)
elif filtType == 'box':
padded = True
padMaskImg = sitk.MirrorPad(binaryMaskImg, [sigmaVox] * 3, [sigmaVox] * 3)
padMaskArr = sitk.GetArrayFromImage(padMaskImg)
filter = sitk.BoxMeanImageFilter()
filter.SetRadius(sigmaVox)

dim = binaryMask.shape
blurredMask3M = np.empty_like(binaryMask, dtype=float)
for slc in range(dim[2]):
if not np.any(binaryMask[:,:,slc]):
blurredMask3M[:,:,slc] = binaryMask[:,:,slc]
fullSize = padMaskArr.shape
blurredMask3M = np.empty_like(padMaskArr, dtype=float)
for slc in range(fullSize[2]):
if not np.any(binaryMask[:, :, slc]):
blurredMask3M[:, :, slc] = padMaskArr[:, :, slc]
continue
img = sitk.GetImageFromArray(binaryMask[:,:,slc].astype(float))
blurImage = filter.Execute(img)
blurredMask3M[:,:,slc] = sitk.GetArrayFromImage(blurImage)
img = sitk.GetImageFromArray(padMaskArr[:, :, slc].astype(float))
blurImageFull = filter.Execute(img)
if padded:
startIdx = [(f - o) // 2 for f, o in zip(fullSize, origSize)]
blurImage = sitk.Crop(blurImageFull, startIdx)
else:
blurImage = blurImageFull

blurredMask3M[:, :, slc] = sitk.GetArrayFromImage(blurImage)
return blurredMask3M


Expand Down

0 comments on commit fbd9268

Please sign in to comment.