Skip to content
GitLab
Explore
Sign in
Primary navigation
Search or go to…
Project
L
Labo07_PGM
Manage
Activity
Members
Labels
Plan
Issues
Issue boards
Milestones
Wiki
Code
Merge requests
Repository
Branches
Commits
Tags
Repository graph
Compare revisions
Snippets
Build
Pipelines
Jobs
Pipeline schedules
Artifacts
Deploy
Releases
Model registry
Operate
Environments
Monitor
Incidents
Analyze
Value stream analytics
Contributor analytics
CI/CD analytics
Repository analytics
Model experiments
Help
Help
Support
GitLab documentation
Compare GitLab plans
Community forum
Contribute to GitLab
Provide feedback
Keyboard shortcuts
?
Snippets
Groups
Projects
Show more breadcrumbs
damian.boquetec
Labo07_PGM
Commits
04e72579
Commit
04e72579
authored
4 years ago
by
damian.boquetec
Browse files
Options
Downloads
Patches
Plain Diff
Comments added$
parent
ea9126e9
No related branches found
No related tags found
No related merge requests found
Changes
2
Hide whitespace changes
Inline
Side-by-side
Showing
2 changed files
pgm.c
+95
-1
95 additions, 1 deletion
pgm.c
pgm_main.c
+22
-19
22 additions, 19 deletions
pgm_main.c
with
117 additions
and
20 deletions
pgm.c
+
95
−
1
View file @
04e72579
#include
"pgm.h"
/**
* pgm_read_from_file reads a pgm file and fills the pgm struct "p" with its data
* @param p is a pointer of pgm struct
* @param filename is a pointer of characters representing the path of the targeted file
* @return pgm_error
**/
pgm_error
pgm_read_from_file
(
pgm
*
p
,
char
*
filename
){
if
(
filename
==
NULL
||
p
==
NULL
){
return
failure
;
...
...
@@ -23,6 +30,13 @@ pgm_error pgm_read_from_file(pgm *p, char *filename){
return
success
;
}
/**
* pgm_write_to_file creates a pgm file from a pgm struct with a custom name
* @param p is a pointer of pgm struct
* @param filename is a pointer of characters that defines the custom file name
* @return pgm_error
**/
pgm_error
pgm_write_to_file
(
pgm
*
p
,
char
*
filename
){
if
(
filename
==
NULL
||
p
==
NULL
){
return
failure
;
...
...
@@ -45,6 +59,13 @@ pgm_error pgm_write_to_file(pgm *p, char *filename){
return
success
;
}
/**
* pgm_negative modifies an empty pgm struct with a negative version of the original one
* @param neg is a pointer of pgm struct which contains the negative version
* @param orig constant pointer of pgm which is the original pgm
* @return pgm_error
**/
pgm_error
pgm_negative
(
pgm
*
neg
,
const
pgm
*
const
orig
){
if
(
neg
==
NULL
||
orig
==
NULL
){
return
failure
;
...
...
@@ -61,6 +82,13 @@ pgm_error pgm_negative(pgm *neg, const pgm *const orig){
return
success
;
}
/**
* pgm_symmetry_hori modifies an empty pgm struct with a horizontal symmetric version of the original one
* @param sym is a pointer of pgm struct which contains the modified version
* @param orig constant pointer of pgm which is the original pgm
* @return pgm_error
**/
pgm_error
pgm_symmetry_hori
(
pgm
*
sym
,
const
pgm
*
const
orig
){
if
(
sym
==
NULL
||
orig
==
NULL
){
return
failure
;
...
...
@@ -77,6 +105,13 @@ pgm_error pgm_symmetry_hori(pgm *sym, const pgm *const orig){
return
success
;
}
/**
* pgm_symmetry_vert modifies an empty pgm struct with a vertical symmetric version of the original one
* @param sym is a pointer of pgm struct which contains the modified version
* @param orig constant pointer of pgm which is the original pgm
* @return pgm_error
**/
pgm_error
pgm_symmetry_vert
(
pgm
*
sym
,
const
pgm
*
const
orig
){
if
(
sym
==
NULL
||
orig
==
NULL
){
return
failure
;
...
...
@@ -93,6 +128,13 @@ pgm_error pgm_symmetry_vert(pgm *sym, const pgm *const orig){
return
success
;
}
/**
* pgm_symmetry_cent modifies an empty pgm struct with a central symmetric version of the original one
* @param sym is a pointer of pgm struct which contains the modified version
* @param orig constant pointer of pgm which is the original pgm
* @return pgm_error
**/
pgm_error
pgm_symmetry_cent
(
pgm
*
sym
,
const
pgm
*
const
orig
){
if
(
sym
==
NULL
||
orig
==
NULL
){
return
failure
;
...
...
@@ -109,6 +151,13 @@ pgm_error pgm_symmetry_cent(pgm *sym, const pgm *const orig){
return
success
;
}
/**
* pgm_photomaton modifies an empty pgm struct with a x4 photomaton version of the original one
* @param photomaton is a pointer of pgm struct which contains the modified version
* @param orig constant pointer of pgm which is the original pgm
* @return pgm_error
**/
pgm_error
pgm_photomaton
(
pgm
*
photomaton
,
const
pgm
*
const
orig
){
if
(
photomaton
==
NULL
||
orig
==
NULL
){
return
failure
;
...
...
@@ -134,6 +183,19 @@ pgm_error pgm_photomaton(pgm *photomaton, const pgm *const orig){
return
success
;
}
/**
* pgm_crop modifies an empty pgm struct with a cropped version of the original one depending on bounds
* @param crop is a pointer of pgm struct which contains the cropped version
* @param orig constant pointer of pgm which is the original pgm
* @param x0 is the lower x axis bound
* @param x1 is the upper x axis bound
* @param y0 is the lower y axis bound
* @param y1 is the upper y axis bound
* @return pgm_error
*
* WARNING: this function doesn't work properly, only squared bounds make it work
**/
pgm_error
pgm_crop
(
pgm
*
crop
,
const
pgm
*
const
orig
,
int32_t
x0
,
int32_t
x1
,
int32_t
y0
,
int32_t
y1
){
if
(
crop
==
NULL
||
orig
==
NULL
){
return
failure
;
...
...
@@ -147,6 +209,14 @@ pgm_error pgm_crop(pgm *crop, const pgm *const orig, int32_t x0, int32_t x1, int
return
success
;
}
/**
* add_zeros_in_pgm modifies an empty pgm struct with a "zero bordered" version of the original one
* Used to avoid edge problems when calculating convolutions
* @param zeroedPgm is a pointer of pgm struct which contains the "zero bordered" version
* @param orig constant pointer of pgm which is the original pgm
* @return pgm_error
**/
pgm_error
add_zeros_in_pgm
(
pgm
*
zeroedPgm
,
const
pgm
*
const
orig
){
if
(
zeroedPgm
==
NULL
||
orig
==
NULL
){
return
failure
;
...
...
@@ -169,6 +239,15 @@ pgm_error add_zeros_in_pgm(pgm *zeroedPgm, const pgm *const orig){
return
success
;
}
/**
* calculate_pixel_conv calculates the convoluted version of a pixel using a sub matrix from
* an image and a kernel
* @param m is a matrix containing pixels from an image
* @param kernel constant pointer of matrix containing values to calcuate a convolution
* @param max represents the maximum value of a pixel
* @return result
**/
int
calculate_pixel_conv
(
const
matrix
m
,
const
matrix
*
const
kernel
,
int
max
){
int
result
=
0
;
...
...
@@ -184,6 +263,15 @@ int calculate_pixel_conv(const matrix m, const matrix *const kernel, int max){
return
result
;
}
/**
* pmg_conv modifies an empty pgm struct with a "convoluted" version of the original one depending on a kernel
* @param conv is a pointer of pgm which contains the "convoluted" version
* @param orig constant pointer of pgm which is the original pgm
* @param kernel constant pointer of matrix containing values to calcuate a convolution
* @param norm double number added to modify convolution "behaviour"
* @return pgm_error
**/
pgm_error
pmg_conv
(
pgm
*
conv
,
const
pgm
*
const
orig
,
const
matrix
*
const
kernel
,
double
norm
){
if
(
conv
==
NULL
||
orig
==
NULL
||
kernel
==
NULL
){
return
failure
;
...
...
@@ -203,8 +291,14 @@ pgm_error pmg_conv(pgm *conv, const pgm *const orig, const matrix *const kernel,
return
success
;
}
/**
* demo uses SDL2 library to display an image on a window
* @param img is a constant pointer of the pgm displayed on screen
* @return pgm_error
**/
pgm_error
demo
(
const
pgm
*
const
img
){
int
width
=
img
->
pixels
.
l
,
height
=
img
->
pixels
.
c
;
int
width
=
img
->
pixels
.
c
,
height
=
img
->
pixels
.
l
;
struct
gfx_context_t
*
ctxt
=
gfx_create
(
"Example"
,
width
,
height
);
while
(
gfx_keypressed
()
!=
27
/*ESC btn code*/
)
{
...
...
This diff is collapsed.
Click to expand it.
pgm_main.c
+
22
−
19
View file @
04e72579
#include
"pgm.h"
int
main
(){
//variables initialization
pgm
a
;
pgm
neg
;
pgm
sym_hori
;
...
...
@@ -12,50 +13,52 @@ int main(){
pgm
pgmWithZeros
;
pgm
convolution
;
int
conv
[
9
]
=
{
1
,
1
,
1
,
1
,
1
,
1
,
1
,
1
,
1
};
matrix
convKernel
;
matrix_init_from_array
(
&
convKernel
,
3
,
3
,
conv
,
9
);
//Read pgm
printf
(
"%d"
,
pgm_read_from_file
(
&
a
,
"mandrill.pgm"
));
//printf("%d", pgm_write_to_file(&a, "newf.pgm"));
//Negative
printf
(
"%d"
,
pgm_negative
(
&
neg
,
&
a
));
//printf("%d", pgm_write_to_file(&neg, "neg.pgm"));
//horizontal symmetry
printf
(
"%d"
,
pgm_symmetry_hori
(
&
sym_hori
,
&
a
));
//printf("%d", pgm_write_to_file(&sym_hori, "sym_hori.pgm"));
//vertical symmetry
printf
(
"%d"
,
pgm_symmetry_vert
(
&
sym_vert
,
&
a
));
//printf("%d", pgm_write_to_file(&sym_vert, "sym_vert.pgm"));
//central symmetry
printf
(
"%d"
,
pgm_symmetry_cent
(
&
sym_cent
,
&
a
));
//printf("%d", pgm_write_to_file(&sym_cent, "sym_cent.pgm"));
//Photomaton x4
printf
(
"%d"
,
pgm_photomaton
(
&
photomatonx4
,
&
a
));
//printf("%d", pgm_write_to_file(&photomatonx4, "photomatonx4.pgm"));
//Photomaton x16
printf
(
"%d"
,
pgm_photomaton
(
&
photomatonx16
,
&
photomatonx4
));
//printf("%d", pgm_write_to_file(&photomatonx16, "photomatonx16.pgm"));
//Crop
printf
(
"%d"
,
pgm_crop
(
&
cropped
,
&
a
,
100
,
200
,
200
,
500
));
//printf("%d", pgm_write_to_file(&cropped, "cropped.pgm"));
//Convolution
printf
(
"%d"
,
add_zeros_in_pgm
(
&
pgmWithZeros
,
&
a
));
printf
(
"%d"
,
pmg_conv
(
&
convolution
,
&
pgmWithZeros
,
&
convKernel
,
1
));
//printf("%d", pgm_write_to_file(&convolution, "convolution.pgm"));
//demo(&neg);
//demo(&sym_hori);
//demo(&sym_vert);
//demo(&sym_cent);
//demo(&photomatonx4);
//demo(&photomatonx16);
//demo(&cropped);
//demo(&convolution);
demo
(
&
neg
);
demo
(
&
sym_hori
);
demo
(
&
sym_vert
);
demo
(
&
sym_cent
);
demo
(
&
photomatonx4
);
demo
(
&
photomatonx16
);
demo
(
&
cropped
);
demo
(
&
convolution
);
//Destroying pgm's matrixes
matrix_destroy
(
&
a
.
pixels
);
matrix_destroy
(
&
neg
.
pixels
);
matrix_destroy
(
&
sym_hori
.
pixels
);
...
...
This diff is collapsed.
Click to expand it.
Preview
0%
Loading
Try again
or
attach a new file
.
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Save comment
Cancel
Please
register
or
sign in
to comment