J-0
00m
00j
00h
00min
00s

Version interactive avec LaTeX compilé

CCINP Informatique Commune PSI 2015

Notez ce sujet en cliquant sur l'étoile
0.0(0 votes)
Logo ccinp
2025_08_29_5d1a0af42e8d73521929g
# -*- 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
# 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.
CCINP Informatique Commune PSI 2015 - Version Web LaTeX | WikiPrépa | WikiPrépa