# Revision history [back]

### FINGERPRINT IMAGE ORIENTATION ESTIMATION

hi i am new to image processing. i have tried to create a fingerprint image orientation using gardient based method. i have used the following c code to compute the orientation. while i try to overlay the orientation on fingerprint image its not well. can any suggest me if any changes is to be made in the code and also suggest me the best fingerprint image orientation algorithm.

// extracts the orientations orientations = malloc(sizeof(byte)fgRows); for (y = 0; y < fgRows; y++) { orientations[y] = malloc(fgColumns); ZeroMemory(orientations[y],fgColumns); for (x = 0; x < fgColumns; x++) { if (foreground[y][x]) { int px = border + x * step; int py = border + y * step; int i,j,k,l,m,n; double dx[step][step],dy[step][step]; double gx,gy; double nx,ny,ne,coh; int sx[3][3] = {{-1,0,1},{-2,0,2},{-1,0,1}}; int sy[3][3] = {{-1,-2,-1},{0,0,0},{1,2,1}}; int sumX,sumY;

                // TODO: estimate local orientation at pixel (px,py)
//  and store it into orientations[y][x]

if(px<imageWidth && py<imageHeight)
{

for(i=py,k=0; i<py+step; i++,k++)
{
for(j=px,l=0; j<px+step; j++,l++)
{

dx[k][l] = image[i*imageWidth+(j+1)]-image[i*imageWidth+(j-1)];
dy[k][l] = image[(i+1)*imageWidth+j]-image[(i-1)*imageWidth+j];
}
}

for(i=0; i<step; i++)
{
for(j=0; j<step; j++)
{
gx += 2*dx[i][j]*dy[i][j];
gy += dx[i][j]*dx[i][j]-dy[i][j]*dy[i][j];
}
}
orientations[y][x] = (int)(0.5*atan2(gx,gy)+(3.14159265358f*0.5));

gx = 0.0;
gy = 0.0;

}

}
}

 2 No.2 Revision berak 32993 ●7 ●81 ●312

### FINGERPRINT IMAGE ORIENTATION ESTIMATION

hi i am new to image processing. i have tried to create a fingerprint image orientation using gardient based method. i have used the following c code to compute the orientation. while i try to overlay the orientation on fingerprint image its not well. can any suggest me if any changes is to be made in the code and also suggest me the best fingerprint image orientation algorithm.

// extracts the orientations
orientations = malloc(sizeof(byte)fgRows);
malloc(sizeof(byte*)*fgRows);
for (y = 0; y < fgRows; y++)
{
orientations[y] = malloc(fgColumns);
ZeroMemory(orientations[y],fgColumns);
for (x = 0; x < fgColumns; x++)
{
if (foreground[y][x])
{
int px = border + x * step;
int py = border + y * step;
int i,j,k,l,m,n;
double dx[step][step],dy[step][step];
double gx,gy;
double nx,ny,ne,coh;
int sx[3][3] = {{-1,0,1},{-2,0,2},{-1,0,1}};
int sy[3][3] = {{-1,-2,-1},{0,0,0},{1,2,1}};
int sumX,sumY; sumX,sumY;

// TODO: estimate local orientation at pixel (px,py)
//  and store it into orientations[y][x]

if(px<imageWidth && py<imageHeight)
{

for(i=py,k=0; i<py+step; i++,k++)
{
for(j=px,l=0; j<px+step; j++,l++)
{

dx[k][l] = image[i*imageWidth+(j+1)]-image[i*imageWidth+(j-1)];
dy[k][l] = image[(i+1)*imageWidth+j]-image[(i-1)*imageWidth+j];
}
}

for(i=0; i<step; i++)
{
for(j=0; j<step; j++)
{
gx += 2*dx[i][j]*dy[i][j];
gy += dx[i][j]*dx[i][j]-dy[i][j]*dy[i][j];
}
}
orientations[y][x] = (int)(0.5*atan2(gx,gy)+(3.14159265358f*0.5));

gx = 0.0;
gy = 0.0;

}

}
}






 Copyright OpenCV foundation, 2012-2018. Content on this site is licensed under a Creative Commons Attribution Share Alike 3.0 license. about | faq | help | privacy policy | terms of service Powered by Askbot version 0.10.2 Please note: OpenCV answers requires javascript to work properly, please enable javascript in your browser, here is how //IE fix to hide the red margin var noscript = document.getElementsByTagName('noscript')[0]; noscript.style.padding = '0px'; noscript.style.backgroundColor = 'transparent'; askbot['urls']['mark_read_message'] = '/s/messages/markread/'; askbot['urls']['get_tags_by_wildcard'] = '/s/get-tags-by-wildcard/'; askbot['urls']['get_tag_list'] = '/s/get-tag-list/'; askbot['urls']['follow_user'] = '/followit/follow/user/{{userId}}/'; askbot['urls']['unfollow_user'] = '/followit/unfollow/user/{{userId}}/'; askbot['urls']['user_signin'] = '/account/signin/'; askbot['urls']['getEditor'] = '/s/get-editor/'; askbot['urls']['apiGetQuestions'] = '/s/api/get_questions/'; askbot['urls']['ask'] = '/questions/ask/'; askbot['urls']['questions'] = '/questions/'; askbot['settings']['groupsEnabled'] = false; askbot['settings']['static_url'] = '/m/'; askbot['settings']['minSearchWordLength'] = 4; askbot['settings']['mathjaxEnabled'] = false; askbot['settings']['sharingSuffixText'] = ''; askbot['settings']['errorPlacement'] = 'after-label'; askbot['data']['maxCommentLength'] = 800; askbot['settings']['editorType'] = 'markdown'; askbot['settings']['commentsEditorType'] = 'rich\u002Dtext'; askbot['messages']['askYourQuestion'] = 'Ask Your Question'; askbot['messages']['questionSingular'] = 'question'; askbot['messages']['answerSingular'] = 'answer'; askbot['messages']['acceptOwnAnswer'] = 'accept or unaccept your own answer'; askbot['messages']['followQuestions'] = 'follow questions'; askbot['settings']['allowedUploadFileTypes'] = [ "jpg", "jpeg", "gif", "bmp", "png", "tiff" ]; askbot['data']['haveFlashNotifications'] = true; askbot['data']['activeTab'] = 'questions'; askbot['settings']['csrfCookieName'] = 'csrftoken'; askbot['data']['searchUrl'] = ''; /*<![CDATA[*/ $('.mceStatusbar').remove();//a hack to remove the tinyMCE status bar$(document).ready(function(){ // focus input on the search bar endcomment var activeTab = askbot['data']['activeTab']; if (inArray(activeTab, ['users', 'questions', 'tags', 'badges'])) { var searchInput = $('#keywords'); } else if (activeTab === 'ask') { var searchInput =$('#id_title'); } else { var searchInput = undefined; animateHashes(); } if (searchInput) { searchInput.focus(); putCursorAtEnd(searchInput); } var haveFullTextSearchTab = inArray(activeTab, ['questions', 'badges', 'ask']); var haveUserProfilePage = $('body').hasClass('user-profile-page'); if ((haveUserProfilePage || haveFullTextSearchTab) && searchInput && searchInput.length) { var search = new FullTextSearch(); askbot['controllers'] = askbot['controllers'] || {}; askbot['controllers']['fullTextSearch'] = search; search.setSearchUrl(askbot['data']['searchUrl']); if (activeTab === 'ask') { search.setAskButtonEnabled(false); } search.decorate(searchInput); } else if (activeTab === 'tags') { var search = new TagSearch(); search.decorate(searchInput); } if (askbot['data']['userIsAdminOrMod']) {$('body').addClass('admin'); } if (askbot['settings']['groupsEnabled']) { askbot['urls']['add_group'] = "/s/add-group/"; var group_dropdown = new GroupDropdown(); $('.groups-dropdown').append(group_dropdown.getElement()); } var userRep =$('#userToolsNav .reputation'); if (userRep.length) { var showPermsTrigger = new ShowPermsTrigger(); showPermsTrigger.decorate(userRep); } }); if (askbot['data']['haveFlashNotifications']) { $('#validate_email_alert').click(function(){notify.close(true)}) notify.show(); } var langNav =$('.lang-nav'); if (langNav.length) { var nav = new LangNav(); nav.decorate(langNav); } /*]]>*/ //todo - take this out into .js file $(document).ready(function(){$('div.revision div[id^=rev-header-]').bind('click', function(){ var revId = this.id.substr(11); toggleRev(revId); }); lanai.highlightSyntax(); }); function toggleRev(id) { var arrow = $("#rev-arrow-" + id); var visible = arrow.attr("src").indexOf("hide") > -1; if (visible) { var image_path = '/m/default/media/images/expander-arrow-show.gif?v=6'; } else { var image_path = '/m/default/media/images/expander-arrow-hide.gif?v=6'; } image_path = image_path + "?v=6"; arrow.attr("src", image_path);$("#rev-body-" + id).slideToggle("fast"); } for (url_name in askbot['urls']){ askbot['urls'][url_name] = cleanUrl(askbot['urls'][url_name]); }