Comments (2)
I looked through the code that does Gaussian blur, and the efficiency is at least O(n)^4 or larger. There is two for loops to iterate through the image, and there are two for loops to iterate through the kernel. It is possible to completely unroll the for loops, as in make them disappear, for iterating through the image kernel. That would make the efficiency at O(n)^2.
Example in Python:
gausKernel = [[1/16, 2/16, 1/16], [2/16, 4/16, 2/16], [1/16, 2/16, 1/16]]
accum = 0
data2 = copy.deepcopy(data)
for i in range(1, data.shape[0] - 1):
for j in range(1, data.shape[1] - 1):
accum += gausKernel[0][0] * data2[i - 1][j - 1][0]
accum += gausKernel[0][1] * data2[i - 1][j][0]
accum += gausKernel[0][2] * data2[i - 1][j + 1][0]
accum += gausKernel[1][0] * data2[i][j - 1][0]
accum += gausKernel[1][1] * data2[i][j][0]
accum += gausKernel[1][2] * data2[i][j + 1][0]
accum += gausKernel[2][0] * data2[i + 1][j - 1][0]
accum += gausKernel[2][1] * data2[i + 1][j][0]
accum += gausKernel[2][2] * data2[i + 1][j + 1][0]
accum = round(accum)
data2[i][j][0] = accum
data2[i][j][1] = accum
data2[i][j][2] = accum
accum = 0
image3 = Image.fromarray(data2)
display(image3)
For variable kernel sizes, it would obviously make the code larger to maintain since you would need multiple functions.
from marvinj.
You're not magically reducing the time complexity by unrolling the inner loops. It wasn't really O(n^4)
before, it was O(w*h*k^2)
and it still is after your change. But yeah this is a very slow operation you'd probably want to do on the gpu in parallel.
from marvinj.
Related Issues (8)
- MarvinJ in Ionic 4/5 HOT 2
- How to get logo from a picture HOT 1
- Installation with Angular CLI Project HOT 2
- FloodFillSegmentation doesn't work on marvinj-1.0.js due to MarvinSegment x1, y1, x2, y2 not initialized -1
- TypeScript modules
- Is it possible to detect outer background of an image using MARVINJ? HOT 1
- Using on nodejs HOT 2
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from marvinj.