• date post

17-Jul-2016
• Category

## Documents

• view

10

2

Embed Size (px)

description

Algorithm for Grayscale

### Transcript of Basis for Grayscale Images

(https://courserahelp.zendesk.com/hc/requests/new)

HelpCenter(https://accounts.coursera.org/i/zendesk/courserahelp?

return_to=https://courserahelp.zendesk.com/hc/)

NumericalExamples:BasisforGrayscaleImages(Python)

Thegoalofthisexampleistoillustratethetheoreticalconceptsstudiedinclass(vectorspace,scalarproduct,basisand approximation)with a specific class of signals, grayscale images.Consider the following grayscale image ofsize64by64pixels.

In[1]: fromIPython.displayimportImageImage(filename='Num_Ex_3/camera_blurred_big.jpg')

It is representedbya square matrix ,where eachelement corresponds to the intensity of a pixel. ThematrixIisdeterminedfromtheimageusingtheimreadfunction.

Forexample,thefirstcolumnofthisimageisa vector

In[3]: I[:,0]

Out[1]:

g

Populatingtheinteractivenamespacefromnumpyandmatplotlib

g

Out[3]: array([156.,157.,157.,152.,154.,155.,151.,157.,152.,155.,158.,159.,159.,160.,160.,161.,155.,160.,161.,161.,164.,162.,160.,162.,158.,160.,158.,157.,160.,160.,159.,158.,163.,162.,162.,157.,

• Conversely,onecandisplaythearrayasanimagebyusingthepylab.imshowfunctionfrommatplotlib

In[4]: importmatplotlib.pylabaspltplt.imshow(I,cmap=plt.cm.gray,interpolation='none')#Thecmap=plt.cm.grayrenderstheimageingrayplt.show()

Themultiplicationbyascalarisalsodefinedlikethecorrespondingmatrixoperation

Wecanverifythatthespaceof64by64imagesendowedwiththesetwooperationsdefinesanappropriatevectorspace, that is that it satisfiedproperties (1) to (8) inslide42.Wecanalsoendow thisvectorspacewithascalarproductdefinedas

Observethatthisdefinitionofthescalarproductcorrespondstotheubiquitousonein .Thisresultisobtainedbystackingthecolumnsofthe matrixina vector.

160.,114.,114.,103.,88.,62.,109.,82.,108.,128.,138.,140.,136.,128.,122.,137.,147.,114.,114.,144.,112.,115.,117.,131.,112.,141.,99.,97.])

C C

C

C

C

C

*

)

*)

*)

g g

!

!

!

• eachrow,werepresent,ontheright,thebasisvectorand,ontheleft,thecorrespondingimage.Intheseimages,ablackpixelcorrespondstoavalueof1,agrayoneto0andawhiteoneto1.

andsoonuntil

Itlooksasifallimagesareidentical.Lookmoreclosely,youwillnoticethatthereisineachasmallwhitepixel,onthe1strowand1stcolumninthefirstimage,forexample.

Suppose we would like to transmit this image over a communication channel. At the sender side, the image isprojected in the canonical basis and the resulting coefficients are sent. This simply correspond to sendingindividuallytheintensityofeachpixel.Supposethereisanerrorduringtransmissionsuchthatonlythefirsthalfofthecoefficients iscorrectly transmitted.The received images isonlyanapproximationof theoriginaloneand themissingpixelsarereplacedbya0correspondtoholesintheimage(inthiscasetheentirerighthalf)

Wecancomputethedistancebetweenthetwoimages,i.e.,thenormoftheerror.

In[5]:

!

!

!

I_approx[:,I_approx.shape[1]/2:]=0

plt.imshow(I_approx,cmap=plt.cm.gray,interpolation='none')plt.title('Approximation')plt.show()

importmathasm#Errorcalculationerror=II_approxdistance=m.sqrt(sum(sum(error*error)))print'Thedistancebetweentheoriginalandapproximateimageis:',distance

The question is whether we can do better by using another basis than the canonical one. The answer is yes.Consider for example theHaarbasis definedby the set ofmatrices.The following table represents the first foursbasis vectors . Again, we display on each row, on the right, the basis vector and, on the left, thecorrespondingimage.Ineachimage,ablackpixelcorrespondstoavalueof ,agrayoneto andawhiteoneto.

Thedistancebetweentheoriginalandapproximateimageis:6586.03697226

Z

Z

Z

• WeobservethatHaarbasisiscomposedofthescaledandshiftedversionofthesamesignal

Wecanverify that thisbasis is indeedorthogonalbycomputing thescalarproductbetweenany twomatricesand ,forexample,

(psi_i*psi_j).sum()=0//whenorthogonal

Asbeforeweprojecttheimageontothisbasisandsendthecoefficientsoveracommunicationchannelthatloosesthesecondhalfofthecoefficients.Thisisimplementedinthefollowingcode.

In[6]: defhaar(N):#AssumingNisapowerof2importnumpyasnpimportmathasmimportscipyassch=np.zeros((N,N),dtype=float)h[0]=np.ones(N)/m.sqrt(N)forkinrange(1,N):p=sc.fix(m.log(k)/m.log(2))q=float(kpow(2,p))k1=float(pow(2,p))

Z

Z

Z

Z0

"

!

`JG U

`JG U

`PUIFSXJTF

Z

%

Z

&

• t1=float(N/k1)k2=float(pow(2,p+1))t2=float(N/k2)foriinrange(1,int(sc.fix(t2))+1):h[k,i+q*t11]=pow(2,(p/2))/m.sqrt(N)h[k,i+q*t1+t21]=pow(2,(p/2))/m.sqrt(N)returnh

#ArrangeimageincolumnvectorI=I.flatten()#GenerateHaarbasisvector(rowsofH)H=haar(4096)#ProjectimageonthenewbasisI_Haar=np.dot(H,I)#RemovethesecondhalfofthecoefficientI_Haar[2048:4095]=0

#RecovertheimagebyinvertingchangeofbasisI_Haar=np.dot(H.T,I_Haar)

#RearrangepixelsoftheimageI_Haar=I_Haar.reshape(size)

In[7]: imshow(I_Haar,cmap=plt.cm.gray)show()

This happens because the Haar basis decomposes the image into a successive approximation. The firstcoefficients in the basis correspond to a coarse and smoothed version of the image (low frequency)whereas thesubsequent coefficients represent the details in the image (high frequency). Then, in our scenario, we recover acoarseryetcompleteversionoftheimage.

GramSchmidtorthonormalizationprocedure

Inthepreviousexample,wehaveseenhowanorthonormalbasisisusedtocomputeasuccessiveapproximationofa vector. But what happens if the set of vector spanning the space under consideration is not orthonormal? TheGramSchmidtorthonormalizationprocedureenablestofindtheorthonormalbaseofthisspace.

ThedistancebetweentheoriginalimageandtheHaarapproximationis1319.4676957

• R[indexColumn,indexColumn]=norm(U[:,indexColumn])U[:,indexColumn]=U[:,indexColumn]/float(R[indexColumn,indexColumn])returnU

, , .

Thefigurebelowdepictsthevectorsoftheorthogonalbasis.

Thefollowingrotationmatrices

!

4

!

5

!

6

J

4

DPT J

TJO J

TJO J

DPT J

C

5

DPT C

TJO C

TJO C

DPT C

D

6

DPT D TJO D

• performacounterclockwiserotationofanangle , ,and withrespecttotheaxis , ,and ,respectively.

Let's rotate the w.r.t. the axis, w.r.t. the axis,and w.r.t. the axis,with , , and

Thesoobtainedthreevectors,depictedinthefigureabove,donotformanorthogonalbasisanymore.Forinstance.

D

6

DPT D

TJO D

TJO D

DPT D

J C D 4 5 6

!

4

6 !

5

4 !

6

5 J R C R

D R

D 2

6

!

4

J 2

4

!

5

C 2

5

!

6

2

2

• We can use the GramSchmidt procedure to reobtain an orthonormal basis. By feeding the procedure with thematrixcomposedofthethreevectors , ,and weobtain

Thefigurebelowpresentstheneworthogonalvectors.

Onecaneasilycheckthatthecolumsofthematrix formanorthonormalbasis,i.e.

Finally,letuscheckthecode:

In[10]: v1=np.array([[0.866,0.5,0.0]]).Tv2=np.array([[0.0,0.5,0.866]]).Tv3=np.array([[0.7071,0.0,0.7071]]).TV=np.concatenate((v1,v2,v3),axis=1)print'matrixV'printV

2

2

2

• CreatedFri11Apr20148:57AMEDT

E=gs_orthonormalization(V)

print'Orthonormalizedbasis:'printEprint'Checktheorthonormality:',(np.dot(E.T,E)np.eye(3)).sum()

Exercises

Considerthethreevectors

ApplytheGramSchmidtprocessonsuchvectorsandprovidetheoutputmatrix .

Doestheoutputmatrix representasetoforthonormalvectors?

Ifyes,why?

1.dot(E.T,E)==I2.det(E)==03.r