need help with an assignment
in
Programming Questions
•
1 years ago
i have an assignment and i'm almost done but i just need a little bit of help to finish it.
any help would be much appreciated.
here's the assignment requirements:
http://people.scs.carleton.ca/~lanthier/teaching/COMP1405/Assignments/COMP1405_A5_F11.pdf
and here's my code so far:
PImage originalFingerprint;
PImage updatedFingerprint;
int imageWidth; //image width
int imageHeight; //image height
int imgCount = 0;
byte[][] imageArray; // The binary fingerprint image as an array
byte[][] maskArray; // The binary mask as an array
void thinning(){
for (int col=1; col<originalFingerprint.width-1; col++) {
for (int row=1; row<originalFingerprint.height-1; row++) {
maskArray[col][row] = 0;
//Check if its black or white
if (brightness(originalFingerprint.get(col, row)) < 127)
//if black then
imageArray[col][row] = 1;
else
//if white then...
imageArray[col][row] = 0;
//If the pixel in the array is black then...
if (imageArray[col][row] == 1) {
//1st pass
//If the pixel above is white, and the pixel below is black then...
if(imageArray[col][row-1] == 0 && imageArray[col][row+1] == 1){
//Check connectivity
if (((1-imageArray[col+1][row]) - ((1-imageArray[col+1][row])*(1-imageArray[col+1][row-1])*(1-imageArray[col][row-1])) +
(1-imageArray[col][row-1]) - ((1-imageArray[col][row-1])*(1-imageArray[col-1][row-1])*(1-imageArray[col-1][row])) +
(1-imageArray[col-1][row]) - ((1-imageArray[col-1][row])*(1-imageArray[col+1][row+1])*(1-imageArray[col][row+1])) +
(1-imageArray[col][row+1]) - ((1-imageArray[col][row+1])*(1-imageArray[col+1][row+1])*(1-imageArray[col+1][row]))) == 1) {
maskArray[col][row] = 1;
imageArray[col][row] = 0;
}
}
//2nd pass
//if pixel left is white and right is black
if(imageArray[col-1][row] == 0 && imageArray[col+1][row] == 1){
//Check connectivity
if (((1-imageArray[col+1][row]) - ((1-imageArray[col+1][row])*(1-imageArray[col+1][row-1])*(1-imageArray[col][row-1])) +
(1-imageArray[col][row-1]) - ((1-imageArray[col][row-1])*(1-imageArray[col-1][row-1])*(1-imageArray[col-1][row])) +
(1-imageArray[col-1][row]) - ((1-imageArray[col-1][row])*(1-imageArray[col+1][row+1])*(1-imageArray[col][row+1])) +
(1-imageArray[col][row+1]) - ((1-imageArray[col][row+1])*(1-imageArray[col+1][row+1])*(1-imageArray[col+1][row]))) == 1) {
maskArray[col][row] = 1;
imageArray[col][row] = 0;
}
}
//3rd pass
//if pixel above is black and pixel below is white
if(imageArray[col][row-1] == 1 && imageArray[col][row+1] == 0){
//Check connectivity
if (((1-imageArray[col+1][row]) - ((1-imageArray[col+1][row])*(1-imageArray[col+1][row-1])*(1-imageArray[col][row-1])) +
(1-imageArray[col][row-1]) - ((1-imageArray[col][row-1])*(1-imageArray[col-1][row-1])*(1-imageArray[col-1][row])) +
(1-imageArray[col-1][row]) - ((1-imageArray[col-1][row])*(1-imageArray[col+1][row+1])*(1-imageArray[col][row+1])) +
(1-imageArray[col][row+1]) - ((1-imageArray[col][row+1])*(1-imageArray[col+1][row+1])*(1-imageArray[col+1][row]))) == 1) {
maskArray[col][row] = 1;
imageArray[col][row] = 0;
}
}
//4th pass
//if pixel left is black and right is white
if(imageArray[col-1][row] == 1 && imageArray[col+1][row] == 0){
//Check connectivity
if (((1-imageArray[col+1][row]) - ((1-imageArray[col+1][row])*(1-imageArray[col+1][row-1])*(1-imageArray[col][row-1])) +
(1-imageArray[col][row-1]) - ((1-imageArray[col][row-1])*(1-imageArray[col-1][row-1])*(1-imageArray[col-1][row])) +
(1-imageArray[col-1][row]) - ((1-imageArray[col-1][row])*(1-imageArray[col+1][row+1])*(1-imageArray[col][row+1])) +
(1-imageArray[col][row+1]) - ((1-imageArray[col][row+1])*(1-imageArray[col+1][row+1])*(1-imageArray[col+1][row]))) == 1) {
maskArray[col][row] = 1;
imageArray[col][row] = 0;
}
}
}
// maskArray[col][row] = 0;
}//end 2nd for loop
}//end first for loop
}//end thinning()
void drawNew(){
//Drawing the updated fingerprint
for (int col = 0; col < originalFingerprint.width; col++) {
for (int row = 0; row < originalFingerprint.height; row++) {
if (imageArray[col][row] == 1) updatedFingerprint.set(col, row, 0);
else updatedFingerprint.set(col, row, #FFFFFF);
}
}
}
void mousePressed(){
//Change picture each time mouse is clicked
imgCount++;
if(imgCount == 0) {
originalFingerprint = loadImage("print1.png");
}
if(imgCount == 1) {
originalFingerprint = loadImage("print1b.png");
}
if(imgCount == 2) {
originalFingerprint = loadImage("print2.png");
}
if(imgCount == 3) {
originalFingerprint = loadImage("print2b.png");
}
if(imgCount == 4) {
originalFingerprint = loadImage("print3.png");
}
if(imgCount == 5) {
originalFingerprint = loadImage("print3b.png");
imgCount = -1;//reset counter
}
}
void setup() {
//Use image dimensions for window dimensions
originalFingerprint = loadImage("print1.png"); //load the image from the file
imageWidth = originalFingerprint.width; //get pixel width of image
imageHeight = originalFingerprint.height; //get pixel height of image
updatedFingerprint = createImage(imageWidth,imageHeight, RGB);
updatedFingerprint.loadPixels();
imageArray = new byte[originalFingerprint.width][originalFingerprint.height];
maskArray = new byte[originalFingerprint.width][originalFingerprint.height];
size(imageWidth*2,imageHeight); //set the size of canvas window
}
void draw(){
image(originalFingerprint, 0, 0);
image(updatedFingerprint, imageWidth, 0);
thinning();
drawNew();
}
any help would be much appreciated.
here's the assignment requirements:
http://people.scs.carleton.ca/~lanthier/teaching/COMP1405/Assignments/COMP1405_A5_F11.pdf
and here's my code so far:
PImage originalFingerprint;
PImage updatedFingerprint;
int imageWidth; //image width
int imageHeight; //image height
int imgCount = 0;
byte[][] imageArray; // The binary fingerprint image as an array
byte[][] maskArray; // The binary mask as an array
void thinning(){
for (int col=1; col<originalFingerprint.width-1; col++) {
for (int row=1; row<originalFingerprint.height-1; row++) {
maskArray[col][row] = 0;
//Check if its black or white
if (brightness(originalFingerprint.get(col, row)) < 127)
//if black then
imageArray[col][row] = 1;
else
//if white then...
imageArray[col][row] = 0;
//If the pixel in the array is black then...
if (imageArray[col][row] == 1) {
//1st pass
//If the pixel above is white, and the pixel below is black then...
if(imageArray[col][row-1] == 0 && imageArray[col][row+1] == 1){
//Check connectivity
if (((1-imageArray[col+1][row]) - ((1-imageArray[col+1][row])*(1-imageArray[col+1][row-1])*(1-imageArray[col][row-1])) +
(1-imageArray[col][row-1]) - ((1-imageArray[col][row-1])*(1-imageArray[col-1][row-1])*(1-imageArray[col-1][row])) +
(1-imageArray[col-1][row]) - ((1-imageArray[col-1][row])*(1-imageArray[col+1][row+1])*(1-imageArray[col][row+1])) +
(1-imageArray[col][row+1]) - ((1-imageArray[col][row+1])*(1-imageArray[col+1][row+1])*(1-imageArray[col+1][row]))) == 1) {
maskArray[col][row] = 1;
imageArray[col][row] = 0;
}
}
//2nd pass
//if pixel left is white and right is black
if(imageArray[col-1][row] == 0 && imageArray[col+1][row] == 1){
//Check connectivity
if (((1-imageArray[col+1][row]) - ((1-imageArray[col+1][row])*(1-imageArray[col+1][row-1])*(1-imageArray[col][row-1])) +
(1-imageArray[col][row-1]) - ((1-imageArray[col][row-1])*(1-imageArray[col-1][row-1])*(1-imageArray[col-1][row])) +
(1-imageArray[col-1][row]) - ((1-imageArray[col-1][row])*(1-imageArray[col+1][row+1])*(1-imageArray[col][row+1])) +
(1-imageArray[col][row+1]) - ((1-imageArray[col][row+1])*(1-imageArray[col+1][row+1])*(1-imageArray[col+1][row]))) == 1) {
maskArray[col][row] = 1;
imageArray[col][row] = 0;
}
}
//3rd pass
//if pixel above is black and pixel below is white
if(imageArray[col][row-1] == 1 && imageArray[col][row+1] == 0){
//Check connectivity
if (((1-imageArray[col+1][row]) - ((1-imageArray[col+1][row])*(1-imageArray[col+1][row-1])*(1-imageArray[col][row-1])) +
(1-imageArray[col][row-1]) - ((1-imageArray[col][row-1])*(1-imageArray[col-1][row-1])*(1-imageArray[col-1][row])) +
(1-imageArray[col-1][row]) - ((1-imageArray[col-1][row])*(1-imageArray[col+1][row+1])*(1-imageArray[col][row+1])) +
(1-imageArray[col][row+1]) - ((1-imageArray[col][row+1])*(1-imageArray[col+1][row+1])*(1-imageArray[col+1][row]))) == 1) {
maskArray[col][row] = 1;
imageArray[col][row] = 0;
}
}
//4th pass
//if pixel left is black and right is white
if(imageArray[col-1][row] == 1 && imageArray[col+1][row] == 0){
//Check connectivity
if (((1-imageArray[col+1][row]) - ((1-imageArray[col+1][row])*(1-imageArray[col+1][row-1])*(1-imageArray[col][row-1])) +
(1-imageArray[col][row-1]) - ((1-imageArray[col][row-1])*(1-imageArray[col-1][row-1])*(1-imageArray[col-1][row])) +
(1-imageArray[col-1][row]) - ((1-imageArray[col-1][row])*(1-imageArray[col+1][row+1])*(1-imageArray[col][row+1])) +
(1-imageArray[col][row+1]) - ((1-imageArray[col][row+1])*(1-imageArray[col+1][row+1])*(1-imageArray[col+1][row]))) == 1) {
maskArray[col][row] = 1;
imageArray[col][row] = 0;
}
}
}
// maskArray[col][row] = 0;
}//end 2nd for loop
}//end first for loop
}//end thinning()
void drawNew(){
//Drawing the updated fingerprint
for (int col = 0; col < originalFingerprint.width; col++) {
for (int row = 0; row < originalFingerprint.height; row++) {
if (imageArray[col][row] == 1) updatedFingerprint.set(col, row, 0);
else updatedFingerprint.set(col, row, #FFFFFF);
}
}
}
void mousePressed(){
//Change picture each time mouse is clicked
imgCount++;
if(imgCount == 0) {
originalFingerprint = loadImage("print1.png");
}
if(imgCount == 1) {
originalFingerprint = loadImage("print1b.png");
}
if(imgCount == 2) {
originalFingerprint = loadImage("print2.png");
}
if(imgCount == 3) {
originalFingerprint = loadImage("print2b.png");
}
if(imgCount == 4) {
originalFingerprint = loadImage("print3.png");
}
if(imgCount == 5) {
originalFingerprint = loadImage("print3b.png");
imgCount = -1;//reset counter
}
}
void setup() {
//Use image dimensions for window dimensions
originalFingerprint = loadImage("print1.png"); //load the image from the file
imageWidth = originalFingerprint.width; //get pixel width of image
imageHeight = originalFingerprint.height; //get pixel height of image
updatedFingerprint = createImage(imageWidth,imageHeight, RGB);
updatedFingerprint.loadPixels();
imageArray = new byte[originalFingerprint.width][originalFingerprint.height];
maskArray = new byte[originalFingerprint.width][originalFingerprint.height];
size(imageWidth*2,imageHeight); //set the size of canvas window
}
void draw(){
image(originalFingerprint, 0, 0);
image(updatedFingerprint, imageWidth, 0);
thinning();
drawNew();
}
1