-

   rss_rss_hh_new

 - e-mail

 

 -

 LiveInternet.ru:
: 17.03.2011
:
:
: 51

:


[ ]

, 25 2017 . 19:40 +
, , .

, , Fortran .


, .


( ) . , .., , , .

, , , , , , , . , , , .

, . , , . , , , , , ( , , ..).

( ).


1990 ( ). , .

. .


, , :

$$display$$I_{t}(x,y,t)=div(c(x,y,t)\nabla I(x,y,t)) \: \: \: \: \: \: \: \: (1)$$display$$


C :

$$display$$I(x,y,0) = I_{0}(x,y)$$display$$


:

$inline$I(x,y,t)$inline$ ; $inline$t$inline$, ;
$inline$I_{0}(x,y)$inline$ ;
$inline$I_{t}$inline$ $inline$t$inline$;
$inline$div$inline$ ;
$inline$\nabla$inline$ ;

, , ( ) . 0 , .

.

, , $inline$c(x,y,t)$inline$ , $inline$(x,y,t)\equiv 1$inline$, :

$$display$$I_{t}(x,y,t)=div(\nabla I(x,y,t))=\frac{\partial^{2}I}{\partial x^{2}}+\frac{\partial^{2}I}{\partial y^{2}}$$display$$


, $inline$t$inline$, ( ):

$$display$$I(x,y,t)= I_{0}(x,y)*G(x,y;t)$$display$$


:

$inline$*$inline$ ;
$inline$G(x,y;t)={\frac {1}{2\pi t^{2}}}e^{-{\frac {x^{2}+y^{2}}{2t^{2}}}}$inline$ c $inline$t$inline$ ;

, $inline$(x,y,t)$inline$ .

(1), , ( ). $inline$c$inline$:

$inline$c(x,y,t)=0$inline$ ;
$inline$c(x,y,t)=1$inline$ , , ;

$inline$\nabla I$inline$ . , . :

$$display$$c(x,y,t)=g(||\nabla I(x,y,t)||)$$display$$


$inline$g(.)$inline$ $inline$[0;1]$inline$.

- , , $inline$g$inline$ .

$inline$g$inline$:

$$display$$g(x)=e^{-(\frac{x}{k})^{2}} \: \: \: \: \: \: \: \: (2)$$display$$


$$display$$g(x)=\frac{1}{1+(\frac{x}{k})^{2}} \: \: \: \: \: \: \: \: (3)$$display$$


$inline$k$inline$ , , .

( 3). $inline$g$inline$ $inline$k$inline$.



, $inline$k$inline$, $inline$g$inline$ .

, , $inline$(\tilde{x},\tilde{y})$inline$, $inline$\tilde{t}$inline$: $inline$||\nabla I(\tilde{x},\tilde{y}, \tilde{t})||=4$inline$. $inline$g_{k=2}(||\nabla I(\tilde{x},\tilde{y}, \tilde{t})||)=g_{k=2}(4)=0.2$inline$, $inline$g_{k=16}(4)\approx 0.94$inline$. , , $inline$g$inline$ , .

, $inline$k$inline$ , $inline$k$inline$ , .


, . . :

$$display$$\frac{\partial }{\partial x}I(x,y,t)=\frac{\partial }{\partial x}\left [ c(x,y,t)\frac{\partial }{\partial x}I(x,y,t) \right ]+\frac{\partial }{\partial y}\left [ c(x,y,t)\frac{\partial }{\partial y}I(x,y,t) \right ]$$display$$


- :

$inline$ I(x,y,t+\Delta t)-I(x,y,t)=\\ \hspace{55mm}=\frac{1}{(\Delta x)^{2}}\left [ c(x+\frac{\Delta x}{2},y,t)\cdot (I(x+\Delta x,y,t)-I(x,y,t))-\\ \hspace{68mm}-c(x-\frac{\Delta x}{2},y,t)\cdot (I(x,y,t)-I(x-\Delta x,y,t))\right ]+\\ \hspace{55mm}+\frac{1}{(\Delta y)^{2}}\left [ c(x,y+\frac{\Delta y}{2},t)\cdot (I(x,y+\Delta y,t)-I(x,y,t))-\\ \hspace{68mm}-c(x,y-\frac{\Delta y}{2},t)\cdot (I(x,y,t)-I(x,y-\Delta y,t))\right ]$inline$

- . , $inline$\Delta x=\Delta y=1$inline$ $inline$0\leq \Delta t \leq \frac{1}{4}$inline$. , , :

$$display$$I_{i,j}^{t+1}=I_{i,j}^{t}+\Delta t\left [ {C_{N}}_{i,j}^{t}\cdot \bigtriangledown_{N}I_{i,j}^{t}+{C_{S}}_{i,j}^{t}\cdot \bigtriangledown_{S}I_{i,j}^{t}+{C_{E}}_{i,j}^{t}\cdot \bigtriangledown_{E}I_{i,j}^{t}+{C_{W}}_{i,j}^{t}\cdot \bigtriangledown_{W}I_{i,j}^{t} \right ] $$display$$


:

$inline$\bigtriangledown_{N}I_{i,j}^{t}=I_{i-1,j}^{t}-I_{i,j}^{t}$inline$
$inline$\bigtriangledown_{S}I_{i,j}^{t}=I_{i+1,j}^{t}-I_{i,j}^{t}$inline$
$inline$\bigtriangledown_{E}I_{i,j}^{t}=I_{i,j+1}^{t}-I_{i,j}^{t}$inline$
$inline$\bigtriangledown_{W}I_{i,j}^{t}=I_{i,j-1}^{t}-I_{i,j}^{t}$inline$

$inline${C_{N}}_{i,j}^{t}=g(||{(\nabla I)}_{i-1/2,j}^{t}||)$inline$
$inline${C_{S}}_{i,j}^{t}=g(||{(\nabla I)}_{i+1/2,j}^{t}||)$inline$
$inline${C_{E}}_{i,j}^{t}=g(||{(\nabla I)}_{i,j+1/2}^{t}||)$inline$
$inline${C_{W}}_{i,j}^{t}=g(||{(\nabla I)}_{i,j-1/2}^{t}||)$inline$

$inline$C$inline$ . .

$inline${C_{N}}_{i,j}^{t}=g(|\bigtriangledown_{N}I_{i,j}^{t}|)$inline$
$inline${C_{S}}_{i,j}^{t}=g(|\bigtriangledown_{S}I_{i,j}^{t}|)$inline$
$inline${C_{E}}_{i,j}^{t}=g(|\bigtriangledown_{E}I_{i,j}^{t}|)$inline$
$inline${C_{W}}_{i,j}^{t}=g(|\bigtriangledown_{W}I_{i,j}^{t}|)$inline$

, , , , .

:

$$display$$I_{i,j}^{t+1}=I_{i,j}^{t}+\Delta t\left [ g(|N|)\cdot N+g(|S|)\cdot S+g(|E|)\cdot E+g(|W|)\cdot W \right ] \: \: \: \: \: \: \: \: (4) $$display$$


:

$inline$N=\bigtriangledown_{N}I_{i,j}^{t}$inline$
$inline$S=\bigtriangledown_{S}I_{i,j}^{t}$inline$
$inline$E=\bigtriangledown_{E}I_{i,j}^{t}$inline$
$inline$W=\bigtriangledown_{W}I_{i,j}^{t}$inline$

.


. , .


, , , . : $inline$I(D)=0$inline$. .


Fortran


, , . , $inline$t$inline$ $inline$\frac{t}{\Delta t}$inline$ , .
:

  1. ( w h );
  2. (w+2)*(h+2) ( I);
  3. (w+2)*(h+2) ( BlurI);
  4. I=0;
  5. I ( , , , );
  6. level
    1. 4 I, - . , $inline$I_{i,j}^{t+1}$inline$ BlurI, $inline$I_{i,j}^{t}$inline$ I;
    2. I BlurI;
    3. , level=level+deltaT, deltaT , ;

  7. BlurI. ;
  8. , ;

, .

Fortran


. , . , , - .

, . ( ) , , .

, , PGM P5. bitmap . ASCII , ( 0 255) . , .

PGM , , , . 255.

PGM .

program blur
  use pgmio

  implicit none
  
  double precision, parameter :: t=10.0d0, deltaT=0.2d0, k=10.0d0
  character*(*), parameter :: input='dif_tomography.pgm', output='output.pgm'

  double precision, allocatable :: u(:,:), nu(:,:)
  double precision :: north, south, east, west, level
  integer :: w, h, offset, n, i, j

end program blur

t , , deltaT , k g. Input output .

w h.

call pgmsize(input, w, h, offset)

Offset , .

input.

allocate(u(0:w+1,0:h+1))
u=0
allocate(nu(w,h))
call pgmread(input, offset, w, h, u, 0, 0)

, , , , u , 0 w+1 , 0 h+1 . .

pgmread w*h , offset ( PGM) u. , u .

, , , , PGM .

.

  level = 0 !  
  do while (levelcode>

, , Fortran , j i. , , - , . , , , -.

.

  deallocate(u)

  call pgmwriteheader(output, w, h) 
  call pgmappendbytes(output, nu, 1, 1) 

  deallocate(nu)

pgmwriteheader output PGM P5. pgmappendbytes output nu, , nu 1 . , pgmappendbytes , , , .

g. , 3.

  contains 
      function g(x) result(v)
        implicit none
        double precision, intent(in) :: x
        double precision :: v
        v = 1/(1+(x/k)**2)
      end function g

->

gfortran ( , ):

gfortran pgmio.f90 blur.f90



t.

.



.



.



(t=10).



(t=10, k=8).



, .

. k t deltaT (t=10, deltaT=0.2).



, k. . k , .

(t=10,k=5).



. .



, , . deltaT=10 .


. $inline$g$inline$, $inline$k$inline$.

, . . , , .

: PGM, .


  1. . Scale-Space and Edge Detection Using Anisotropic Diffusion
  2. PGM
Original source: habrahabr.ru (comments, light).

https://habrahabr.ru/post/331618/


: [1] []
 

:
: 

: ( )

:

  URL