[SOLVED] Computer-Vision-Image Processing on Threshold

30.00 $

Programming resource
Digital learning resource
Category:
✓ Practical programming resource
✓ Suitable for guided study and reference
✓ Tutor guidance available when needed

Description

Rate this product

Project 1:  Given a grey-scale image, you are to perform the following tasks:

1.      Compute histogram of the input image and display the histogram in two       formats, see the output description below.

2.      Perform binary threshold operation on the input image with a given       threshold value via argv[].

3.      Output the result of the threshold in two formats, see the output       description below.

************************************** Language: C++

**************************************

*** Name your soft copy and hard copy files using the naming convention as given in the project submission requirement discussed in a lecture and is posted in Google Classroom.

*** All on-line submission MUST include Soft copy (*.zip) and hard copy (*.pdf) in the same email attachments with correct email subject as stated in the email requirement; otherwise, your submission will be rejected.

1.  Run your program on data1 with threshold 5

2.  Run your program on data2 with threshold 38.

3.  Include in your hard copy *.pdf file as follows: – Cover page.

–  source code.

–  Output outFile1 for data 1.

–  Output outFile2 for data 1.

–  Output outFile3 for data 1.

–  Output outFile4 for data 1.

–  Output outFile1 for data 2.

–  Output outFile2 for data 2.

–  Output outFile3 for data 2.

–  Output outFile4 for data 2.

********************************************** I. Input: There are two inputs to the program. **********************************************   a) inFile1 (argv[1]):

a txt file representing a grey-scale image, where  the first text line (4 integers) is the “header” of the input image then follows by rows and cols of integers.

For example,

4    6  1 12    // image has 4 rows,6 cols, min is 1, max is 12

2  3  4 11  2  9

5    6 11  2 10  7

1  1 12  1  9  9

4  5  6  9  9  9

b) a threshold value (argv[2])
******************************************* II.  Outputs: There are four output files. *******************************************

a)  OutFile1 (use argv[3]): For the output of histogram in the following    format (to be used in the future project):

The first text-line is the image header, follows by a list of pairs <i, j>    where i = 0 to max and j is the hist(i)    For example:

4  6 1 12

0    0

1    3

2    3

3    1

4    2

5    2

6    2

7    1

8    0

9    6

10  1

11  2

12  1

b)  OutFile2 (use argv[4]): Display the histogram (for visual) as follows:

first text line is the image header then follows by a list of : greyScale (numpixels): number of +’s for example, the output of the histogram of the above image would be: Use the maximum of 70 +’s for all counts greater than 70.  Use small font   size  so that 70 +’s can be printed on one text line.

4  6 1 12

0    (0):

1    (3):+++

2    (3):+++

3    (1):+

4    (2):++

5    (2):++

6    (2):++       7  (1):+   8  (0):

9    (6):++++++

10  (1):+

11  (2):++

12  (1):+

c)  outFile3 (use argv[5]): The result of the threshold of the input image. (To    be used for future processing.)

Note: The output binary image also needs to have the image header. For example, given the above image and 6 as the threshold value then the binary image would be:

4  6 0 1    // notice the min and max values have changed 0 and 1.

0 0 0 1 0 1

0 1 1 0 1 1

0 0 1 0 1 1

0 0 1 1 1 1

d)  outFile4 (use argv[6]): (For nice visual purposes).

For example, given the above threshold image, the pretty print replace 0   with a period.

4  6 0 1

. . . 1 . 1

. 1 1 . 1 1

. . 1 . 1 1

. . 1 1 1 1

******************************* III. Data structure:

*******************************

–  image class

–  numRows (int)

–  numCols (int)

–  minVal (int)

–  maxVal (int)

–  histAry(int*) //a 1D integer array, size of maxVal + 1

// need to be dynamically allocated at run time

–  thresholdValue (int) // via argv[2]

Methods:

–  computeHist(…) // The algorithm is given in the lecture note

–  printHist (…)// on your own; see the above example

–  dispHist (…)// on your own; see the above example

–  threshold(…) // The algorithm is given below

*******************************

IV. main (…)

*******************************

step 0: inFile ß open input file use argv[1]     open all 4 outFiles via argv[3], argv[4], argv[5], argv[6]

step 1: numRows, numCols, minVal, maxVal ß read from inFile  step 2: histAry ß dynamically allocate and initialize to 0 step 3: ComputeHist (…)  step 4: printHist(outFile1)  Step 5: dispHist (outFile2) step 6: close inFile

reopen inFile

Step 7: thrVal ß get from argv[2]

outFile3 ß “The threshold value uses is ” thrVal      outFile4 ß “The threshold value uses is ” thrVal

Step 8: threshold (inFile, outFile3, outFile4, thrVal)

step 9: close all files

*************************************************

V. threshold (inFile, outFile3, outFile4, thrVal) *************************************************  Step 0: minVal ß 0      maxVal ß 1

Step 1: outFile3, outFile4 ß output numRows, numCols, minVal and maxVal

Step 2: pixelValß read from inFile one integer at a time

Step 3: if pixelVal >= thrVal

outFile3 <– write 1 follows by a blank     outFile4 <– write 1 follows by a blank

else

outFile3 <– write 0 follows by a blank     outFile4 <– write . follows by a blank

Step 4: repeat step 2 to 3 until the inFile is empty

Resource details

Understand the Task Before You Use the Resource

Review the requirements, identify the programming concepts involved, study the implementation and test your understanding with your own examples and modifications.