DEV Community

haratena9
haratena9

Posted on • Updated on

Image Processing #3 Statistics

About this memorandum

Recently, I had a chance to experience deep learning and image/video processing at work, but there were many things I didn't understand about how to touch parameters and amplify data, so I decided to study video processing from scratch.

Statistics

  • Image (pixel value) statistics: used for various image analysis
    • Mean value
    • Median
    • Frequent value
    • Variance
    • Contrast
  • Some can be calculated from histograms

The right image shows a white whiteboard with a black metamon on it.
max:1 (white), min:0.0 (black), and we can see that the contrast is 1.0.
There are many ways to calculate contrast.(see code below)

Summary

Statistics calculation code

im_files =[file_path_A, file_path_B, file_path_C]

for file in im_files:
    im = imread(file)[:,:,:3]  # For RGBA, extract only RGB
    im = rgb2gray(im)
    imshow(im)
    plt.show()

    print('mean: ', im.mean())
    print('std: ', im.std())
    print('median: ', np.median(im))
    print('max: ', im.max())
    print('min: ', im.min())
    print('contrast1: ', (im.max() - im.min()) / (im.max() + im.min()) ) # Michelson contrast
    print('contrast2: ', im.max() / im.min() if im.min() > 0 else np.nan ) # contrast ratio
    print('contrast3: ', im.max() - im.min() ) # contrast difference
    print()

Enter fullscreen mode Exit fullscreen mode

Calculate the mean and variance

Unsuggested code

  • Keep the definition formula
  • Large computational complexity: 2 double loops fomula
im = rgb2gray(imread('file_path'))
h, w = im.shape

mean = 0
for y in range(h):
    for x in range(w):
        mean += im[y, x]
mean /= h * w
print('mean: ', mean)

var = 0
for y in range(h):
    for x in range(w):
        var += (im[y, x] - mean)**2
var /= h * w
print('variance: ', var)
print('std: ', np.sqrt(var))
Enter fullscreen mode Exit fullscreen mode

Suggested code

  • Transformed formula
  • Half the computation: one loop. Transformed formula
im = rgb2gray(imread('file_path'))
h, w = im.shape

mean = 0
var = 0
for y in range(h):
    for x in range(w):
        mean += im[y, x]
        var  += im[y, x]**2

mean /= h * w
print('mean: ', mean)

var /= h * w
var -= mean**2
print('variance: ', var)
print('std: ', np.sqrt(var))
Enter fullscreen mode Exit fullscreen mode

Top comments (0)