Sergey89 писал(а):Нужна помощь в реализации подсчета яркости интегрального изображения под признаком в светлых и темных областях.
Qwertiy писал(а):Debugger, а под какой вопрос ты предлагаешь решение?
Debugger писал(а):Если надо быстро
Public Sub FF(Ar(), nm)
Dim rex(1050) As Double
Dim Imx(1056) As Double
Dim a(1050) As Double
Dim n As Integer
Dim i As Integer
Dim j As Double
Dim C(1050) As Double
Const Pi = 3.1415926
n = nm
'For j = 0 To N / 2
mm:
rex(j) = 0
Imx(j) = 0
For i = 1 To n Step 1
j = j + 1 / n
rex(j) = rex(j) + Ar(i) * Cos(2 * Pi * i * (j / n))
Imx(j) = Imx(j) - Ar(i) * Sin(2 * Pi * i * (j / n))
DoEvents
a(j) = Sqr(Imx(j) ^ 2 + rex(j) ^ 2)
P3.Line (i, a(j))-(i, a(j-1)), vbBlack
Next
If j < n / 2 Then GoTo mm
End Sub
Private Sub Command1_Click()
Dim Pi As Double
Pi = 3.14159265
loaddata
Dim N As Integer
N = C
ReDim REX(C / 2)
ReDim IMX(C / 2)
ReDim Frekans(C / 2)
For K = 1 To N / 2
For i = 1 To N - 1
REX(K) = REX(K) + XX(i) * Cos(2 * Pi * K * i / N) 'reel
IMX(K) = IMX(K) - XX(i) * Sin(2 * Pi * K * i / N) 'Imaginary
Next i
Frekans(K) = Sqr(REX(K) ^ 2 + IMX(K) ^ 2) '
Next K
For K = 1 To N / 2
'Text1.Text = Text1.Text & Frekans(K) & vbCrLf
Picture2.PSet (K, Picture2.ScaleHeight - Frekans(K) / Picture2.ScaleHeight), vbRed
Picture2.Line (K, Picture2.ScaleHeight - Frekans(K) / Picture2.ScaleHeight)-(K, Picture2.ScaleHeight - Frekans(K - 1) / Picture2.ScaleHeight), vbRed
Next K
Close
End Sub
Option Explicit
Dim XX() As Double
Dim REX() As Double
Dim IMX() As Double
Dim K As Double
Dim i As Integer
Dim C As Integer
Dim Frekans() As Double
Dim b() As Double
Dim Value() As Currency
Private Sub Command1_Click()
Dim t1, t2
Dim Pi As Double
Dim N As Integer
t1 = Time
loaddata
Pi = 3.14159265
N = C
ReDim REX(C / 2)
ReDim IMX(C / 2)
ReDim Frekans(C / 2)
For K = 1 To N / 2
For i = 1 To N - 1
REX(K) = REX(K) + XX(i) * Cos(2 * Pi * K * i / N) 'reel
IMX(K) = IMX(K) - XX(i) * Sin(2 * Pi * K * i / N) 'Imaginary
Next i
Frekans(K) = Sqr(REX(K) ^ 2 + IMX(K) ^ 2) '
Next K
For K = 1 To N / 2
Picture2.PSet (K, Picture2.ScaleHeight - (Frekans(K) / Picture2.ScaleHeight)), vbRed
Picture2.Line (K, Picture2.ScaleHeight - (Frekans(K) / Picture2.ScaleHeight))-(K, Picture2.ScaleHeight - (Frekans(K - 1) / Picture2.ScaleHeight)), vbRed
Next K
t2 = Time
Caption = Abs(DateDiff("s", t1, t2))
Close
End Sub
Sub loaddata()
Dim z As Integer, w As Integer, h As Integer
Dim y As Integer
w = Picture1.ScaleWidth
h = Picture1.ScaleHeight
C = w * h
ReDim Preserve XX(C)
For z = 0 To C
y = Int(z / w)
XX(z) = Picture1.Point(z - (y * w), (z - (z - (y * w) / w))) Mod 256
If XX(z) <= 0 Then XX(z) = 1
If XX(z) > 255 Then XX(z) = 255
Next z
Close
End Sub
Function FFT2(a() As Double, nn As Integer, InverseFFT As Boolean)
Dim Jj As Integer, N As Integer, Mmax As Integer, m As Integer, j As Integer, istep As Integer, I As Integer, isign As Integer
Dim wtemp As Double, wr As Double, wpr As Double, wpi As Double, wi As Double, theta As Double, tempr As Double, tempi As Double
List2.Clear
If InverseFFT Then
isign = -1
Else
isign = 1
End If
N = 2 * nn
j = 1
ii = 1
Do While ii <= nn
I = 2 * ii - 1
If j > I Then
tempr = a(j - 1)
tempi = a(j)
a(j - 1) = a(I - 1)
a(j) = a(I)
a(I - 1) = tempr
a(I) = tempi
End If
m = N \ 2
Do While (m >= 2) And (j > m)
j = j - m
m = m \ 2
Loop
j = j + m
ii = ii + 1
Loop
Mmax = 2
Do While N > Mmax
istep = 2 * Mmax
theta = 2 * PI / (isign * Mmax)
wpr = -2# * Sin(0.5 * theta)
wpi = Sin(theta)
wr = 1#
wi = 0#
ii = 1
Do While ii <= Mmax \ 2
m = 2 * ii - 1
Jj = 0
Do While Jj <= (N - m) \ istep
I = m + Jj * istep
j = I + Mmax
tempr = wr * a(j - 1) - wi * a(j)
tempi = wr * a(j) + wi * a(j - 1)
a(j - 1) = a(I - 1) - tempr
a(j) = a(I) - tempi
a(I - 1) = a(I - 1) + tempr
a(I) = a(I) + tempi
Jj = Jj + 1
Loop
wtemp = wr
wr = wr * wpr - wi * wpi + wr
wi = wi * wpr + wtemp * wpi + wi
ii = ii + 1
Loop
Mmax = istep
Loop
If InverseFFT Then
For I = 1 To nn - 1
a(I - 1) = a(I - 1) / nn
Next I
End If
Picture2.Cls
Dim Am() As Double
ReDim Am(N) As Double
For I = 1 To N - 1
'List2.AddItem a(I) / nn
Am(I) = Sqr(a(I) * a(I) + a(I + 1) * a(I + 1)) / nn
Picture2.Line (I, Picture2.ScaleHeight - Am(I))-(I, Picture2.ScaleHeight - Am(I - 1)), vbRed
Next I
End Function
Сейчас этот форум просматривают: SemrushBot и гости: 62