CCINP Informatique Commune PSI 2015
Notez ce sujet en cliquant sur l'étoile
0.0(0 votes)
Téléchargements disponibles
Sujet et rapport
Corrigés
Lecture et formats
Lecture web du sujet
Version HTML avec rendu des formules, intégrée sur la page canonique.
# -*- coding: utf-8 -*-
Created on Fri Jul 3 16:02:40 2015
@author: arno
"""
# non demandé
def demande_valeur(text):
x=int(input(text))
return x
# Q1.
def demande_fenetre()
Px=demande_valeur('Valeur de Px : ',)
Py=demande_valeur('Valeur de Py : ' ')
H=demande_valeur('Valeur de H : ')
return [P\overline{x},Py,L,H]
# Q2. fenetre=demande_fenetre()
def verification_fenetre(image_width,image_height,fenetre):
[Px,Py,L,H]=fenetre
return 0<=Px and Px+L<=image_width and 0<=Py and Py+H<=image_fenetre
# Q3. SELECT filename FROM instruments JOIN definitions ON instruments.id=defini
tions.mid WHERE name='pince';
# Q4.
def centre(fenetre):
[Px,Py,L,H]=fenetre
return [(2*Px+L)//2,(2*Py+H)//2]
# Q5. à chaque pixel est associé un entier entre 0 et 255. Or 2**8=256. Donc cha
que pixel est codé sur 8 bits=1 octet.
# Au total pour l'image: 3*m*n=1 440 000 octets
# soit en gros 1,37 Méga-octets
# Q6.
def grayscale(imagecolor):
[m,n]=imagecolor.shape[1:3]
image=[[0 for x in range (m)] for y in range(n)] # avec numpy: image=zeros((
m,n)) for i in range(m):
for j in range(n):
rgb=[imagecolor[0][i][j],imagecolor[1][i][j],imagecolor[2][i][j]]
image[i][j]=(max(rgb)+min(rgb))//2
return image
# Q7
def construction_coordonnees_pts(fenetre,numM,numN):
[Px,Py,L,H]=fenetre
for x
for arange(Px,Px+L+1,L//(numM-1)):
for y in arange(Py,Py+H+1,H//(numN-1)):
pts.append(x) # x est le même pendant l'exécution de la boucle for y
return pts.append(y)
return pts
# Q8. Ix = imgI[ux+1,uy] - imgI[ux,uy]
mars 15, 16 22:10
stdin
stdin
# Iy = imgI[ux,uy+1] - imgI[ux,uy
Page 2/4
# Q9.
def creation_patch(P,patch_size): #P=[Px,Py]
pts=[]
x in range(patch_size):
for y in range(patch_size):
pts.append(P[0]+x-(patch_size-1)//2) # x est le même pendant l'exécu
tion de la boucle for
return pts.ppend(P[1]+y-(patch_size-1)//2)
return pts
# Q10.
def calc_Ab(imgI,imgJ,patch): #patch_size=sqrt(len(patch)/2)
b=zeros((len(patch)//2,'1))
for k in len(patch)//2:
[Ix, Iy,Itdt]=calc_LK_terms([patch[2*k],patch[2*k+1]],imgI,imgJ)
A[k,0]=Ix
A[k,1]=1y
b[k,0]=-Itdt
return A,b
# Q11.
def resoud_LK(A,b):
M=dots(transpose(A),A) #système de Cramer MX=B de taille 2x2
B=dots(transpose(A), b)
# algorithme du pivot de Gauss-Jordan
# recherche d'un pivot sur la colonne 0
if M[0,0]==0:
M[1,:],M[0,:] = M[0,:],M[1,:]
# on effectue une transvection sur la ligne 1
M[1,:]=M[1,:] - (M[1,0]/float(M[0,0]))*M[0,:]
B[1,:]=B[1,:] - (M[1,0]/float(M[0,0]))*B[0,:]
# calcul de dy puis dx
dy=B[1,0]/1oat(M[1,1])
dx=(B[0,0]-M[0,1]*dy)/float(M[0,0])
return [dx,dy]
# Q12.
def recherche_points(imgI,imgJ,pts): # pts=construction_coordonnees_pts(fenetre,
numM, numN)
for -
P=[pts[2* ]
patch=creat,pts[2*k+1]]
[A,b]=
[dx,dyl,patch)
fpts 1
fpts.appe(pts[2*k]+int(dx))
return fpts
# Q13. On n'a pas pris en compte le cas où le patch sort de l'image et le cas ou
transpose(A)*A n'est pas inversible.
# Q14.
fpts=recherche_points(imgI,imgJ,pts)
ffpt=recherche_points(imgJ,imgI,pts)
statut=[]
for k in range(len(ftps)):
statut.append(fpts[k]==ffpts[k])
\# Q15. la notation A[i:j:k] n'a pas été redéfinie: A[start:stop:step]
\# points[0::2] donne les abscisses (indices pairs) et points[1::2] les ordonnées
(indices impairs)
\# on calcule la distance entre un point de référence dans l'image précédente et
dans l'image courante, ceci pour chaque point de référence
\# on donne le résultat dans un tableau numpy de flottants de taille $1 \times($ numm*numN
)
\# Q16.
tri_rapide(t):
if len(t) $<=1$ :
retur
\# rn t \# ou avec un seul élément
else:
tte fonction renverra None en sortie
plus_pe] \# choix arbitraire du pivot
plus_petits=[ $x$ for $x$ in $t$ if $x<p i v o t$
pus_grands= $x$ for $x$ in $t$ [1] if $x>=$ pivot ]
\# trie la liste plus_petits et renvoie None
\#tri_rapide(plus_grands) \# trie la liste plus_grands et renvoie None
rarn tri_rapide(plus_petits)+[pivot]+tri_rapide(plus_grands) \# concaté
et renvoi du resultat
def mediane(a):
tri_rapide(a)
if $\mathrm{n} \% 2==1$ :
if n\%2==1:
else:
return (a[n//2]+a[(n-1)//2])/2.
\# Q17. Algorithme de tri rapide. $O\left(n^{* *} 2\right)$ dans le pire des cas et $O(n \cdot \log (n))$ dan
s le meilleur des cas
\# Q18.
def verification_pts(pts,fpts,statut):
nouveaux_pts=[]
n=len(pts)//2
n=1en(pts)/12
critere2=calcul1(pts,fpts)
for $k$ in range( $n$ ):
if statut[k]==True and critere2[k]<=med:
nouveaux_pts.append(pts[2*k])
nouveaux_pts.append(pts[2*k+1])
return nouveaux_pts
\# Q19.
$\mathrm{n}=1 \mathrm{en}$ (pts)//2
critere3=[]
for k in range( n ):
result=cv2.matchTemplate(imgJ,creation_patch([pts[2*k],pts[2*k+1]],patch_siz
e),CV_TM_CCORR_NORMED)
critere3.append(result)
\# Q20. Argh.
Pas de description pour le moment
