import os
import sys, getopt
import PyIPSDK
import PyIPSDK.IPSDKIPLFiltering as filter
import PyIPSDK.IPSDKIPLBinarization as bin
import PyIPSDK.IPSDKIPLAdvancedMorphology as advmorpho
import PyIPSDK.IPSDKIPLShapeSegmentation as shapesegmentation
import PyIPSDK.IPSDKIPLShapeAnalysis as shapeanalysis
imagesSamplePath = PyIPSDK.getIPSDKDirectory(PyIPSDK.eInternalDirectory.eID_Images)
inputImgPath = os.path.join(imagesSamplePath, "blobs_483x348_UInt8.tif")
tmpPath = PyIPSDK.getIPSDKDefaultDirectory(PyIPSDK.eDefaultExternalDirectory.eDED_Tmp)
outputReportPath = os.path.join(tmpPath, "quantification2d.csv")
inHalfKnlSize = 3
inSpaceSigma = 8
inDilateFactor = 5
try:
opts, args = getopt.getopt(argv,"hi:o:k:s:f:",["inputImgFilePath=","outputReportPath=", "inHalfKnlSize=", "inSpaceSigma=", "inDilateFactor="])
except getopt.GetoptError:
print('<application_script_filename> [--inputImgFilePath <input_image_file_path>] [--outputReportPath <output_report_file_path>] [--inHalfKnlSize <half_kernel_size>] [--inSpaceSigma <space_sigma_value>] [--inDilateFactor <dilate_factor>]')
sys.exit(2)
for opt, arg in opts:
if opt == '-h':
print('<application_script_filename> [--inputImgFilePath <input_image_file_path>] [--outputReportPath <output_report_file_path>] [--inHalfKnlSize <half_kernel_size>] [--inSpaceSigma <space_sigma_value>] [--inDilateFactor <dilate_factor>]')
sys.exit(0)
elif opt in ("-i", "--inputImgFilePath"):
inputImgPath = arg
elif opt in ("-k", "--inHalfKnlSize"):
inHalfKnlSize = int(arg)
elif opt in ("-s", "--inSpaceSigma"):
inSpaceSigma = float(arg)
elif opt in ("-f", "--inDilateFactor"):
inDilateFactor = int(arg)
return inputImgPath, outputReportPath, inHalfKnlSize, inSpaceSigma, inDilateFactor
tmpPath = PyIPSDK.getIPSDKDefaultDirectory(PyIPSDK.eDefaultExternalDirectory.eDED_Tmp)
inputImgPath, outputReportPath, inHalfKnlSize, inSpaceSigma, inDilateFactor =
readCmdArguments(argv)
greyImg = PyIPSDK.loadTiffImageFile(inputImgPath)
greyFilteredImg = filter.separatedBilateral2dImg(greyImg, inHalfKnlSize, inSpaceSigma)
binImg, threshold = bin.otsuThresholdImg(greyFilteredImg)
PyIPSDK.saveTiffImageFile(os.path.join(tmpPath, "binImg.tif"), binImg)
binSepImg = advmorpho.watershedBinarySeparation2dImg(binImg, inDilateFactor, PyIPSDK.eWatershedSeparationMode.eWSM_Split)
PyIPSDK.saveTiffImageFile(os.path.join(tmpPath, "binSepImg.tif"), binSepImg)
labelImg = advmorpho.connectedComponent2dImg(binSepImg)
PyIPSDK.saveTiffImageFile(os.path.join(tmpPath, "labelImg.tif"), labelImg)
shape2dColl = shapesegmentation.labelShapeExtraction2d(labelImg)
geometricCalibration = PyIPSDK.createGeometricCalibration2d(0.01, 0.02, "mm");
measureInfoSet2d = PyIPSDK.createMeasureInfoSet2d(geometricCalibration);
PyIPSDK.createMeasureInfo(measureInfoSet2d, "Area2dMsr");
PyIPSDK.createMeasureInfo(measureInfoSet2d, "EquivalentRayMsr");
PyIPSDK.createMeasureInfo(measureInfoSet2d, "MaxFeretDiameterMsr", shapeanalysis.createMaxFeretDiameterMsrParams(180));
PyIPSDK.createMeasureInfo(measureInfoSet2d, "MeanMsr");
measureSet = shapeanalysis.shapeAnalysis2d(greyImg, shape2dColl, measureInfoSet2d)
print("Saving measure report in file " + outputReportPath)
PyIPSDK.saveCsvMeasureFile(outputReportPath, measureSet)
areaMsrResults = measureSet.getMeasure("Area2dMsr").getMeasureResult()
areaValues = areaMsrResults.getColl(0)
print("First label area equals " + str(areaValues[1]))
try:
areaHistogram = areaMsrResults.extractHistogram(15, 0)
import matplotlib.pyplot as plt
fig, ax = plt.subplots()
ax.bar(areaHistogram.getBinMidValues(), areaHistogram.getFrequencies(), areaHistogram.getBinWidth(), color='r')
plt.title("Area histogram")
plt.xlabel('Bin mean')
plt.ylabel('Frequencies')
plt.grid(True)
plt.show()
except:
print("This part of sample requires matplotlib to be executed.")
if __name__ == "__main__":