Bird
Raised Fist0
Computer Visionml~8 mins

First image processing program in Computer Vision - Model Metrics & Evaluation

Choose your learning style10 modes available

Start learning this pattern below

Jump into concepts and practice - no test required

or
Recommended
Test this pattern10 questions across easy, medium, and hard to know if this pattern is strong
Metrics & Evaluation - First image processing program
Which metric matters for this concept and WHY

For a first image processing program, common tasks include detecting edges, colors, or simple shapes. The key metric to check is accuracy of the output compared to expected results. For example, if the program detects edges, accuracy means how many edges it found correctly versus missed or falsely detected. This helps us know if the program works as intended.

Confusion matrix or equivalent visualization (ASCII)

Imagine the program detects edges in an image. We can compare its output to a correct edge map and count:

      |               | Detected Edge | No Edge |
      |---------------|---------------|---------|
      | True Edge     | TP = 80       | FN = 15 |
      | True No Edge  | FP = 10       | TN = 95 |
    

Here, TP means edges correctly found, FP means wrong edges found, FN means edges missed, and TN means correctly ignored non-edges.

Precision vs Recall tradeoff with concrete examples

In edge detection:

  • Precision = TP / (TP + FP): How many detected edges are actually real edges? High precision means few false edges.
  • Recall = TP / (TP + FN): How many real edges did the program find? High recall means few missed edges.

If the program is too sensitive, it finds many edges but also many false ones (high recall, low precision). If it is too strict, it finds only very clear edges but misses some (high precision, low recall). Balancing these depends on what matters more: not missing edges or not adding false edges.

What "good" vs "bad" metric values look like for this use case

Good edge detection program metrics might be:

  • Precision around 0.85 or higher (most detected edges are real)
  • Recall around 0.80 or higher (most real edges are found)
  • F1 score (balance of precision and recall) above 0.80

Bad metrics would be:

  • Precision below 0.5 (many false edges)
  • Recall below 0.5 (many missed edges)
  • F1 score below 0.5 (poor overall detection)
Metrics pitfalls
  • Accuracy paradox: If most pixels are non-edges, a program that detects no edges can have high accuracy but be useless.
  • Data leakage: Testing on images the program already saw can give falsely high metrics.
  • Overfitting: Program tuned too much on one image type may fail on others, showing good metrics only on training images.
Self-check question

Your edge detection program has 98% accuracy but only 12% recall on edges. Is it good?

Answer: No. The high accuracy is misleading because most pixels are non-edges. The very low recall means it misses almost all real edges, so it does not work well.

Key Result
For first image processing programs, balance precision and recall to ensure meaningful detection beyond simple accuracy.

Practice

(1/5)
1. What does the OpenCV function imread do in an image processing program?
easy
A. It displays an image on the screen.
B. It reads an image file and loads it into the program.
C. It converts an image from color to grayscale.
D. It saves an image to a file.

Solution

  1. Step 1: Understand the purpose of imread

    The function imread is used to load an image from a file into the program's memory.
  2. Step 2: Differentiate from other functions

    Functions like imshow display images, and cvtColor changes image colors, so they do not read files.
  3. Final Answer:

    It reads an image file and loads it into the program. -> Option B
  4. Quick Check:

    imread = load image [OK]
Hint: imread always loads images from files [OK]
Common Mistakes:
  • Confusing imread with imshow
  • Thinking imread changes image colors
  • Assuming imread saves images
2. Which of the following is the correct syntax to display an image stored in variable img using OpenCV?
easy
A. cv2.display(img)
B. cv2.showimage(img)
C. cv2.show('Window', img)
D. cv2.imshow('Window', img)

Solution

  1. Step 1: Recall the OpenCV display function

    The correct function to show an image is cv2.imshow, which takes a window name and the image variable.
  2. Step 2: Check the syntax of options

    Only cv2.imshow('Window', img) uses cv2.imshow with correct parameters: a string window name and the image.
  3. Final Answer:

    cv2.imshow('Window', img) -> Option D
  4. Quick Check:

    imshow = show image [OK]
Hint: imshow needs a window name and image [OK]
Common Mistakes:
  • Using non-existent functions like display or showimage
  • Forgetting the window name argument
  • Swapping argument order
3. What will be the output of this code snippet?
import cv2
img = cv2.imread('photo.jpg')
print(img.shape)
medium
A. It prints the image pixel values.
B. It raises an error because shape is not valid.
C. It prints the dimensions of the image as (height, width, channels).
D. It prints the file size of 'photo.jpg'.

Solution

  1. Step 1: Understand what img.shape returns

    In OpenCV, img.shape gives the dimensions of the image as a tuple: (height, width, number of color channels).
  2. Step 2: Differentiate from other outputs

    It does not print pixel values or file size, and shape is a valid attribute for images loaded by imread.
  3. Final Answer:

    It prints the dimensions of the image as (height, width, channels). -> Option C
  4. Quick Check:

    img.shape = image size [OK]
Hint: shape shows image size and channels [OK]
Common Mistakes:
  • Expecting pixel data instead of shape
  • Thinking shape is a method, not attribute
  • Confusing file size with image dimensions
4. Identify the error in this code snippet:
import cv2
img = cv2.imread('image.png')
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
cv2.imshow('Gray Image')
cv2.waitKey(0)
cv2.destroyAllWindows()
medium
A. Missing the image argument in cv2.imshow function.
B. cv2.cvtColor cannot convert color images.
C. cv2.waitKey requires an argument of 1, not 0.
D. cv2.destroyAllWindows should be called before imshow.

Solution

  1. Step 1: Check the usage of cv2.imshow

    The function cv2.imshow requires two arguments: a window name and the image to display. Here, the image argument is missing.
  2. Step 2: Verify other function calls

    cv2.cvtColor correctly converts color images, waitKey(0) waits indefinitely, and destroyAllWindows is correctly placed after showing images.
  3. Final Answer:

    Missing the image argument in cv2.imshow function. -> Option A
  4. Quick Check:

    imshow needs image argument [OK]
Hint: imshow always needs image to show [OK]
Common Mistakes:
  • Forgetting the image argument in imshow
  • Misunderstanding waitKey argument
  • Calling destroyAllWindows too early
5. You want to write a program that reads an image, converts it to grayscale, and then saves the grayscale image. Which sequence of OpenCV functions is correct?
hard
A. cv2.imread() -> cv2.cvtColor() -> cv2.imwrite()
B. cv2.imshow() -> cv2.cvtColor() -> cv2.imwrite()
C. cv2.imread() -> cv2.imshow() -> cv2.cvtColor()
D. cv2.imwrite() -> cv2.imread() -> cv2.cvtColor()

Solution

  1. Step 1: Understand the task steps

    The program must first read the image, then convert it to grayscale, and finally save the new image.
  2. Step 2: Match functions to steps

    cv2.imread() reads the image, cv2.cvtColor() converts color spaces, and cv2.imwrite() saves the image to a file.
  3. Final Answer:

    cv2.imread() -> cv2.cvtColor() -> cv2.imwrite() -> Option A
  4. Quick Check:

    Read -> Convert -> Save = imread, cvtColor, imwrite [OK]
Hint: Read first, convert second, save last [OK]
Common Mistakes:
  • Trying to save before reading
  • Showing image before converting
  • Mixing order of functions