Short Description
The plotPixel function visualizes the effect of multi-class OTSU thresholding on an image, 
highlighting the positive regions determined by the threshold. he result is a side-by-side plot 
of the original and highlighted images, with a quantitative display of the positive pixels' 
percentage.
 
Function
  
  
          plotPixel(imagePath, num_classes=2)
  
  
  Parameters:
  
    
      
        | Name | 
        Type | 
        Description | 
        Default | 
      
    
    
        
          image_path | 
          
                str
           | 
          
            
              The path to the image file to be processed. Supports formats readable by tifffile, such as TIFF. 
             
           | 
          
              required
           | 
        
        
          num_classes | 
          
                int
           | 
          
            
              The number of classes to divide the pixel intensity range into using OTSU thresholding. Default is 2. 
             
           | 
          
                2
           | 
        
    
  
  Returns:
  
    
      
| Name |         Type | 
        Description | 
      
    
    
        
Plot |           
                matplotlib
           | 
          
            
              Returns a plot comparing original image with the regions identified to be positive for signal. 
             
           | 
        
    
  
  Example
  # Plot the results for image.tif
pp.plotPixel(image_path='/path/to/image.tif', num_classes=3)
 
 
          
            Source code in pixelpartitioner/plotPixel.py
            23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84  | def plotPixel(imagePath, 
              num_classes=2):
    """
Parameters:
        image_path (str): 
            The path to the image file to be processed. Supports formats readable by tifffile, such as TIFF.
        num_classes (int, optional): 
            The number of classes to divide the pixel intensity range into using OTSU thresholding. Default is 2.
Returns:
        Plot (matplotlib): 
            Returns a plot comparing original image with the regions identified to be positive for signal.
Example:
    ```python
    # Plot the results for image.tif
    pp.plotPixel(image_path='/path/to/image.tif', num_classes=3)
    ```
    """
    # Load the image using tifffile
    image = tifffile.imread(imagePath)
    # Check if the image is RGB and convert to grayscale if necessary
    if image.ndim == 3 and image.shape[2] == 3:
        greyImage = rgb2gray(image)
    # Normalize the image intensity to the range [0, 1]
    normalized_image = exposure.rescale_intensity(greyImage.astype(np.float32), out_range=(0, 1))
    # Apply multi-class Otsu thresholding with user-defined number of classes
    thresholds = filters.threshold_multiotsu(normalized_image, classes=num_classes)
    regions = np.digitize(normalized_image, bins=thresholds)
    # Calculate the percentage of pixels in the brightest class
    brightest_pixels = np.sum(regions == num_classes - 1)
    total_pixels = np.prod(regions.shape)
    percentage_brightest = (brightest_pixels / total_pixels) * 100
    # Highlight regions in the brightest class
    highlighted_image = gray2rgb(normalized_image) if normalized_image.ndim == 2 else normalized_image.copy()
    highlighted_image[regions == num_classes - 1] = [1, 0, 0]  # Red for the brightest class
    # Plotting
    fig, ax = plt.subplots(1, 2, figsize=(12, 6))
    ax[0].imshow(image, cmap='gray')
    ax[0].set_title('Original Image')
    ax[0].axis('off')
    ax[1].imshow(highlighted_image)
    ax[1].set_title('Highlighted Positive Regions')
    ax[1].axis('off')
    plt.figtext(0.5, 0.01, f'Percentage of Positive Pixels: {percentage_brightest:.2f}%', ha="center", fontsize=12)
    plt.tight_layout()
  |