Jump to content
Sign in to follow this  
Kubjelle

Lage lavpassfilter i matlab

Recommended Posts

Jeg har et gråskalert bilde, i im2double-verdier. Jeg skal lage et et lavpassfilter som er like stort som dette bildet. Som jeg senere skal elementvis multiplisere med det bildet som er fourier transformert. Det jeg egentlig spør om er: hvordan skal jeg lage et svart bilde med en hvit sentrert sirkel? :p

Share this post


Link to post

Hmmm... Litt usikker, men du kan jo forsøke å lage en liten matrise med en hvit sentrert sirkel, og så forsøke å skallere den opp? Ellers kan du forsøke å lage sirkelen ved å bruke cos/sin for å finne enhetssirkelen og så skallere den opp. Jeg ville forsøkt den første først, vil tro den skal mappes til riktige farger, men er jo selvsagt ikke 100% sikker.

Edited by NevroMance

Share this post


Link to post

Jeg må lage en matrise bestående av 0er og 1ere, der 1erne står for hvit og 0erne står for svart og hvert element i matrisen tilsvarer en pixel. Det jeg ikke skjønner er hvordan jeg skal gjøre det. =P Forresten så er bildet mitt bare 100x100 piksler, så jeg trenger "bare" en 100x100 matrise.

Share this post


Link to post

Vel, min tanke var å lage en matrise, si 10x10, som er 0 bortsett fra en sirkel inni som er 1. Deretter kan du forsøke å skallere denne opp til hva du trenger. Er ikke 100% sikker på at det vil fungere, men verdt ett forsøk. Det andre jeg tenkte var at du kan lage en svart matrise som er 100x100, og så bruke cos/sin funksjoner for å finne hvor 1erne skal. Da må du tenke deg at origo ligger i midten av bildet, altså (50,50), og så jobbe derfra.

Share this post


Link to post

hvordan skal jeg lage et svart bilde med en hvit sentrert sirkel? :p

 

Du kan bruke gimp, photoshop osv. deretter bruke imtool i matlab til å eksportere tegningen til en variabel. Hvis du skal skrive kode for å lage en sirkel kan du bruke f.eks. sin/cos som nevnt eller Bresenham's sirkel algoritme.

Share this post


Link to post

Hmm, tror jeg delvis greide det.

L = zeros(100,100)

for kuk=0:10
for i=0:360
   C=ceil(cos(i)*kuk)
   B=ceil(sin(i)*kuk)
   L(50+(B),50+(C))=1
end
end

 

Men det tar latterlig lang tid å kjøre koden, minst 2min, det må da være en bedre måte å gjøre det på? Dessuten ble den ikke spessielt rund. =/

Share this post


Link to post

Det viser seg at det var det å skrive ut alle matrisene som tok lang tid. :p Fikset seg når jeg skrev ;, bak operasjonene.

 

Finnes det forresten en lett måte å lage en 100x100 matrise bestående av 1ere? Jeg vet at jeg kan bruke forløkker, men det virker litt overkill.

Share this post


Link to post

Jeg vet at jeg kan bruke forløkker, men det virker litt overkill.

 

 

Det greie med matlab er at man slipper å bruke for-løkker, men skriver start:step:slutt i tilordningen som vist nedenfor:

 

octave> m=eye(10)
m =

  1   0   0   0   0   0   0   0   0   0
  0   1   0   0   0   0   0   0   0   0
  0   0   1   0   0   0   0   0   0   0
  0   0   0   1   0   0   0   0   0   0
  0   0   0   0   1   0   0   0   0   0
  0   0   0   0   0   1   0   0   0   0
  0   0   0   0   0   0   1   0   0   0
  0   0   0   0   0   0   0   1   0   0
  0   0   0   0   0   0   0   0   1   0
  0   0   0   0   0   0   0   0   0   1

octave> m(1:1:end,1:1:end)=3
m =

  3   3   3   3   3   3   3   3   3   3
  3   3   3   3   3   3   3   3   3   3
  3   3   3   3   3   3   3   3   3   3
  3   3   3   3   3   3   3   3   3   3
  3   3   3   3   3   3   3   3   3   3
  3   3   3   3   3   3   3   3   3   3
  3   3   3   3   3   3   3   3   3   3
  3   3   3   3   3   3   3   3   3   3
  3   3   3   3   3   3   3   3   3   3
  3   3   3   3   3   3   3   3   3   3

octave> m(:,=4
m =

  4   4   4   4   4   4   4   4   4   4
  4   4   4   4   4   4   4   4   4   4
  4   4   4   4   4   4   4   4   4   4
  4   4   4   4   4   4   4   4   4   4
  4   4   4   4   4   4   4   4   4   4
  4   4   4   4   4   4   4   4   4   4
  4   4   4   4   4   4   4   4   4   4
  4   4   4   4   4   4   4   4   4   4
  4   4   4   4   4   4   4   4   4   4
  4   4   4   4   4   4   4   4   4   4

octave> m(1:2:end,1:2:end) = 8
m =

  8   4   8   4   8   4   8   4   8   4
  4   4   4   4   4   4   4   4   4   4
  8   4   8   4   8   4   8   4   8   4
  4   4   4   4   4   4   4   4   4   4
  8   4   8   4   8   4   8   4   8   4
  4   4   4   4   4   4   4   4   4   4
  8   4   8   4   8   4   8   4   8   4
  4   4   4   4   4   4   4   4   4   4
  8   4   8   4   8   4   8   4   8   4
  4   4   4   4   4   4   4   4   4   4

 

Jeg har brukt 10 i stedet for 100 i mitt eksempel.

Share this post


Link to post

Oi, det var ikke dumt nei!

Men jeg brukte forløkker, fordi jeg egentlig skulle ha levert inn obligen for en stund siden. :p Jeg tenkte faktisk på å bruke ones(100), men tenkte at det måtte være for enkelt!

Share this post


Link to post

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Loading...
Sign in to follow this  

  • Recently Browsing   0 members

    No registered users viewing this page.

×
×
  • Create New...