Skip to content
GitLab
Explore
Sign in
Primary navigation
Search or go to…
Project
hydra-image-processor
Manage
Activity
Members
Labels
Plan
Issues
Issue boards
Milestones
Wiki
Code
Merge requests
Repository
Branches
Commits
Tags
Repository graph
Compare revisions
Snippets
Deploy
Releases
Model registry
Monitor
Incidents
Analyze
Value stream analytics
Contributor analytics
Repository analytics
Model experiments
Help
Help
Support
GitLab documentation
Compare GitLab plans
Community forum
Contribute to GitLab
Provide feedback
Keyboard shortcuts
?
Snippets
Groups
Projects
Show more breadcrumbs
OpenSource
hydra-image-processor
Commits
76f3b582
Commit
76f3b582
authored
11 years ago
by
Eric Wait
Browse files
Options
Downloads
Patches
Plain Diff
dll global cuda buffer for mex interface
parent
70ded4b5
No related branches found
Branches containing commit
No related tags found
Tags containing commit
No related merge requests found
Changes
3
Hide whitespace changes
Inline
Side-by-side
Showing
3 changed files
src/c/CudaMex/MexCommand.cpp
+1
-0
1 addition, 0 deletions
src/c/CudaMex/MexCommand.cpp
src/c/CudaMex/Process.cu
+119
-96
119 additions, 96 deletions
src/c/CudaMex/Process.cu
src/c/CudaMex/Process.h
+1
-0
1 addition, 0 deletions
src/c/CudaMex/Process.h
with
121 additions
and
96 deletions
src/c/CudaMex/MexCommand.cpp
+
1
−
0
View file @
76f3b582
...
...
@@ -62,6 +62,7 @@ std::string MexCommand::printUsageList()
void
MexCommand
::
cleanUp
()
{
clear
();
std
::
map
<
std
::
string
,
MexCommand
*>::
iterator
it
=
commandList
.
begin
();
for
(;
it
!=
commandList
.
end
();
++
it
)
...
...
This diff is collapsed.
Click to expand it.
src/c/CudaMex/Process.cu
+
119
−
96
View file @
76f3b582
...
...
@@ -2,241 +2,264 @@
#include
"CudaImageBuffer.cuh"
#include
"CHelpers.h"
CudaImageBuffer
<
unsigned
char
>*
g_cudaBuffer
=
NULL
;
CudaImageBuffer
<
unsigned
char
>*
g_cudaBuffer2
=
NULL
;
void
clear
()
{
if
(
g_cudaBuffer
!=
NULL
)
delete
g_cudaBuffer
;
if
(
g_cudaBuffer2
!=
NULL
)
delete
g_cudaBuffer2
;
}
void
set
(
Vec
<
unsigned
int
>
imageDims
)
{
if
(
g_cudaBuffer
==
NULL
)
g_cudaBuffer
=
new
CudaImageBuffer
<
unsigned
char
>
(
imageDims
,
true
);
}
void
set2
(
Vec
<
unsigned
int
>
imageDims
)
{
if
(
g_cudaBuffer2
==
NULL
)
g_cudaBuffer2
=
new
CudaImageBuffer
<
unsigned
char
>
(
imageDims
,
true
);
}
void
addConstant
(
const
MexImagePixelType
*
image
,
MexImagePixelType
*
imageOut
,
Vec
<
unsigned
int
>
imageDims
,
double
additive
)
{
CudaImageBuffer
<
unsigned
char
>
cudaBuffer
(
imageDims
,
true
);
cudaBuffer
.
loadImage
(
image
,
imageDims
);
set
(
imageDims
);
g_
cudaBuffer
->
loadImage
(
image
,
imageDims
);
cudaBuffer
.
addConstant
(
additive
);
g_
cudaBuffer
->
addConstant
(
additive
);
cudaBuffer
.
retrieveImage
(
imageOut
);
g_
cudaBuffer
->
retrieveImage
(
imageOut
);
}
void
addImageWith
(
const
MexImagePixelType
*
image1
,
const
MexImagePixelType
*
image2
,
MexImagePixelType
*
imageOut
,
Vec
<
unsigned
int
>
imageDims
,
double
factor
)
{
CudaImageBuffer
<
unsigned
char
>
cudaBuffer1
(
imageDims
,
true
);
CudaImageBuffer
<
unsigned
char
>
cudaBuffer
2
(
imageDims
,
true
);
cudaBuffer
1
.
loadImage
(
image1
,
imageDims
);
cudaBuffer2
.
loadImage
(
image2
,
imageDims
);
set
(
imageDims
);
set
2
(
imageDims
);
g_
cudaBuffer
->
loadImage
(
image1
,
imageDims
);
g_
cudaBuffer2
->
loadImage
(
image2
,
imageDims
);
cudaBuffer
1
.
addImageWith
(
&
cudaBuffer2
,
factor
);
g_
cudaBuffer
->
addImageWith
(
g_
cudaBuffer2
,
factor
);
cudaBuffer
1
.
retrieveImage
(
imageOut
);
g_
cudaBuffer
->
retrieveImage
(
imageOut
);
}
void
applyPolyTransformation
(
const
MexImagePixelType
*
image
,
MexImagePixelType
*
imageOut
,
Vec
<
unsigned
int
>
imageDims
,
double
a
,
double
b
,
double
c
,
MexImagePixelType
minValue
,
MexImagePixelType
maxValue
)
{
CudaImageBuffer
<
unsigned
char
>
cudaBuffer
(
imageDims
,
true
);
cudaBuffer
.
loadImage
(
image
,
imageDims
);
set
(
imageDims
);
g_
cudaBuffer
->
loadImage
(
image
,
imageDims
);
cudaBuffer
.
applyPolyTransformation
(
a
,
b
,
c
,
minValue
,
maxValue
);
g_
cudaBuffer
->
applyPolyTransformation
(
a
,
b
,
c
,
minValue
,
maxValue
);
cudaBuffer
.
retrieveImage
(
imageOut
);
g_
cudaBuffer
->
retrieveImage
(
imageOut
);
}
void
calculateMinMax
(
const
MexImagePixelType
*
image
,
Vec
<
unsigned
int
>
imageDims
,
double
&
minValue
,
double
&
maxValue
)
{
CudaImageBuffer
<
unsigned
char
>
cudaBuffer
(
imageDims
,
true
);
cudaBuffer
.
loadImage
(
image
,
imageDims
);
set
(
imageDims
);
g_
cudaBuffer
->
loadImage
(
image
,
imageDims
);
cudaBuffer
.
calculateMinMax
(
minValue
,
maxValue
);
g_
cudaBuffer
->
calculateMinMax
(
minValue
,
maxValue
);
}
void
contrastEnhancement
(
const
MexImagePixelType
*
image
,
MexImagePixelType
*
imageOut
,
Vec
<
unsigned
int
>
imageDims
,
Vec
<
float
>
sigmas
,
Vec
<
unsigned
int
>
medianNeighborhood
)
{
CudaImageBuffer
<
unsigned
char
>
cudaBuffer
(
imageDims
,
true
);
cudaBuffer
.
loadImage
(
image
,
imageDims
);
set
(
imageDims
);
g_
cudaBuffer
->
loadImage
(
image
,
imageDims
);
cudaBuffer
.
contrastEnhancement
(
sigmas
,
medianNeighborhood
);
g_
cudaBuffer
->
contrastEnhancement
(
sigmas
,
medianNeighborhood
);
cudaBuffer
.
retrieveImage
(
imageOut
);
g_
cudaBuffer
->
retrieveImage
(
imageOut
);
}
void
gaussianFilter
(
const
MexImagePixelType
*
image
,
MexImagePixelType
*
imageOut
,
Vec
<
unsigned
int
>
imageDims
,
Vec
<
float
>
sigmas
)
{
CudaImageBuffer
<
unsigned
char
>
cudaBuffer
(
imageDims
,
true
);
cudaBuffer
.
loadImage
(
image
,
imageDims
);
set
(
imageDims
);
g_
cudaBuffer
->
loadImage
(
image
,
imageDims
);
cudaBuffer
.
gaussianFilter
(
sigmas
);
g_
cudaBuffer
->
gaussianFilter
(
sigmas
);
cudaBuffer
.
retrieveImage
(
imageOut
);
g_
cudaBuffer
->
retrieveImage
(
imageOut
);
}
size_t
getGlobalMemoryAvailable
()
{
CudaImageBuffer
<
unsigned
char
>
cudaBuffer
(
1
);
return
cudaBuffer
.
getGlobalMemoryAvailable
();
return
g_
cudaBuffer
->
getGlobalMemoryAvailable
();
}
void
maxFilter
(
const
MexImagePixelType
*
image
,
MexImagePixelType
*
imageOut
,
Vec
<
unsigned
int
>
imageDims
,
Vec
<
unsigned
int
>
neighborhood
,
double
*
kernel
/*=NULL*/
)
{
CudaImageBuffer
<
unsigned
char
>
cudaBuffer
(
imageDims
,
true
);
cudaBuffer
.
loadImage
(
image
,
imageDims
);
set
(
imageDims
);
g_
cudaBuffer
->
loadImage
(
image
,
imageDims
);
cudaBuffer
.
maxFilter
(
neighborhood
,
kernel
,
true
);
g_
cudaBuffer
->
maxFilter
(
neighborhood
,
kernel
,
true
);
cudaBuffer
.
retrieveImage
(
imageOut
);
g_
cudaBuffer
->
retrieveImage
(
imageOut
);
}
void
maximumIntensityProjection
(
const
MexImagePixelType
*
image
,
MexImagePixelType
*
imageOut
,
Vec
<
unsigned
int
>
imageDims
)
{
CudaImageBuffer
<
unsigned
char
>
cudaBuffer
(
imageDims
,
true
);
cudaBuffer
.
loadImage
(
image
,
imageDims
);
set
(
imageDims
);
g_
cudaBuffer
->
loadImage
(
image
,
imageDims
);
cudaBuffer
.
maximumIntensityProjection
();
g_
cudaBuffer
->
maximumIntensityProjection
();
cudaBuffer
.
retrieveImage
(
imageOut
);
g_
cudaBuffer
->
retrieveImage
(
imageOut
);
}
void
meanFilter
(
const
MexImagePixelType
*
image
,
MexImagePixelType
*
imageOut
,
Vec
<
unsigned
int
>
imageDims
,
Vec
<
unsigned
int
>
neighborhood
)
{
CudaImageBuffer
<
unsigned
char
>
cudaBuffer
(
imageDims
,
true
);
cudaBuffer
.
loadImage
(
image
,
imageDims
);
set
(
imageDims
);
g_
cudaBuffer
->
loadImage
(
image
,
imageDims
);
cudaBuffer
.
meanFilter
(
neighborhood
);
g_
cudaBuffer
->
meanFilter
(
neighborhood
);
cudaBuffer
.
retrieveImage
(
imageOut
);
g_
cudaBuffer
->
retrieveImage
(
imageOut
);
}
void
medianFilter
(
const
MexImagePixelType
*
image
,
MexImagePixelType
*
imageOut
,
Vec
<
unsigned
int
>
imageDims
,
Vec
<
unsigned
int
>
neighborhood
)
{
CudaImageBuffer
<
unsigned
char
>
cudaBuffer
(
imageDims
,
true
);
cudaBuffer
.
loadImage
(
image
,
imageDims
);
set
(
imageDims
);
g_
cudaBuffer
->
loadImage
(
image
,
imageDims
);
cudaBuffer
.
medianFilter
(
neighborhood
);
g_
cudaBuffer
->
medianFilter
(
neighborhood
);
cudaBuffer
.
retrieveImage
(
imageOut
);
g_
cudaBuffer
->
retrieveImage
(
imageOut
);
}
void
minFilter
(
const
MexImagePixelType
*
image
,
MexImagePixelType
*
imageOut
,
Vec
<
unsigned
int
>
imageDims
,
Vec
<
unsigned
int
>
neighborhood
,
double
*
kernel
/*=NULL*/
)
{
CudaImageBuffer
<
unsigned
char
>
cudaBuffer
(
imageDims
,
true
);
cudaBuffer
.
loadImage
(
image
,
imageDims
);
set
(
imageDims
);
g_
cudaBuffer
->
loadImage
(
image
,
imageDims
);
cudaBuffer
.
minFilter
(
neighborhood
,
kernel
,
true
);
g_
cudaBuffer
->
minFilter
(
neighborhood
,
kernel
,
true
);
cudaBuffer
.
retrieveImage
(
imageOut
);
g_
cudaBuffer
->
retrieveImage
(
imageOut
);
}
void
multiplyImage
(
const
MexImagePixelType
*
image
,
MexImagePixelType
*
imageOut
,
Vec
<
unsigned
int
>
imageDims
,
double
factor
)
{
CudaImageBuffer
<
unsigned
char
>
cudaBuffer
(
imageDims
,
true
);
cudaBuffer
.
loadImage
(
image
,
imageDims
);
set
(
imageDims
);
g_
cudaBuffer
->
loadImage
(
image
,
imageDims
);
cudaBuffer
.
multiplyImage
(
factor
);
g_
cudaBuffer
->
multiplyImage
(
factor
);
cudaBuffer
.
retrieveImage
(
imageOut
);
g_
cudaBuffer
->
retrieveImage
(
imageOut
);
}
void
multiplyImageWith
(
const
MexImagePixelType
*
image1
,
const
MexImagePixelType
*
image2
,
MexImagePixelType
*
imageOut
,
Vec
<
unsigned
int
>
imageDims
)
{
CudaImageBuffer
<
unsigned
char
>
cudaBuffer1
(
imageDims
,
true
);
CudaImageBuffer
<
unsigned
char
>
cudaBuffer
2
(
imageDims
,
true
);
cudaBuffer
1
.
loadImage
(
image1
,
imageDims
);
cudaBuffer2
.
loadImage
(
image2
,
imageDims
);
set
(
imageDims
);
set
2
(
imageDims
);
g_
cudaBuffer
->
loadImage
(
image1
,
imageDims
);
g_
cudaBuffer2
->
loadImage
(
image2
,
imageDims
);
cudaBuffer
1
.
multiplyImageWith
(
&
cudaBuffer2
);
g_
cudaBuffer
->
multiplyImageWith
(
g_
cudaBuffer2
);
cudaBuffer
1
.
retrieveImage
(
imageOut
);
g_
cudaBuffer
->
retrieveImage
(
imageOut
);
}
double
normalizedCovariance
(
const
MexImagePixelType
*
image1
,
const
MexImagePixelType
*
image2
,
Vec
<
unsigned
int
>
imageDims
)
{
CudaImageBuffer
<
unsigned
char
>
cudaBuffer1
(
imageDims
,
true
);
CudaImageBuffer
<
unsigned
char
>
cudaBuffer
2
(
imageDims
,
true
);
cudaBuffer
1
.
loadImage
(
image1
,
imageDims
);
cudaBuffer2
.
loadImage
(
image2
,
imageDims
);
set
(
imageDims
);
set
2
(
imageDims
);
g_
cudaBuffer
->
loadImage
(
image1
,
imageDims
);
g_
cudaBuffer2
->
loadImage
(
image2
,
imageDims
);
return
cudaBuffer
1
.
normalizedCovariance
(
&
cudaBuffer2
);
return
g_
cudaBuffer
->
normalizedCovariance
(
g_
cudaBuffer2
);
}
void
otsuThresholdFilter
(
const
MexImagePixelType
*
image
,
MexImagePixelType
*
imageOut
,
Vec
<
unsigned
int
>
imageDims
,
double
alpha
)
{
CudaImageBuffer
<
unsigned
char
>
cudaBuffer
(
imageDims
,
true
);
cudaBuffer
.
loadImage
(
image
,
imageDims
);
set
(
imageDims
);
g_
cudaBuffer
->
loadImage
(
image
,
imageDims
);
cudaBuffer
.
otsuThresholdFilter
((
float
)
alpha
);
g_
cudaBuffer
->
otsuThresholdFilter
((
float
)
alpha
);
cudaBuffer
.
retrieveImage
(
imageOut
);
g_
cudaBuffer
->
retrieveImage
(
imageOut
);
}
MexImagePixelType
otsuThesholdValue
(
const
MexImagePixelType
*
image
,
Vec
<
unsigned
int
>
imageDims
)
{
CudaImageBuffer
<
unsigned
char
>
cudaBuffer
(
imageDims
,
true
);
cudaBuffer
.
loadImage
(
image
,
imageDims
);
set
(
imageDims
);
g_
cudaBuffer
->
loadImage
(
image
,
imageDims
);
return
cudaBuffer
.
otsuThresholdValue
();
return
g_
cudaBuffer
->
otsuThresholdValue
();
}
void
imagePow
(
const
MexImagePixelType
*
image
,
MexImagePixelType
*
imageOut
,
Vec
<
unsigned
int
>
imageDims
,
int
p
)
{
CudaImageBuffer
<
unsigned
char
>
cudaBuffer
(
imageDims
,
true
);
cudaBuffer
.
loadImage
(
image
,
imageDims
);
set
(
imageDims
);
g_
cudaBuffer
->
loadImage
(
image
,
imageDims
);
cudaBuffer
.
imagePow
(
p
);
g_
cudaBuffer
->
imagePow
(
p
);
cudaBuffer
.
retrieveImage
(
imageOut
);
g_
cudaBuffer
->
retrieveImage
(
imageOut
);
}
double
sumArray
(
const
MexImagePixelType
*
image
,
Vec
<
unsigned
int
>
imageDims
)
{
CudaImageBuffer
<
unsigned
char
>
cudaBuffer
(
imageDims
,
true
);
cudaBuffer
.
loadImage
(
image
,
imageDims
);
set
(
imageDims
);
g_
cudaBuffer
->
loadImage
(
image
,
imageDims
);
double
sum
;
cudaBuffer
.
sumArray
(
sum
);
g_
cudaBuffer
->
sumArray
(
sum
);
return
sum
;
}
MexImagePixelType
*
reduceImage
(
const
MexImagePixelType
*
image
,
Vec
<
unsigned
int
>&
imageDims
,
Vec
<
double
>
reductions
)
{
CudaImageBuffer
<
unsigned
char
>
cudaBuffer
(
imageDims
,
true
);
cudaBuffer
.
loadImage
(
image
,
imageDims
);
set
(
imageDims
);
g_
cudaBuffer
->
loadImage
(
image
,
imageDims
);
cudaBuffer
.
reduceImage
(
reductions
);
g_
cudaBuffer
->
reduceImage
(
reductions
);
imageDims
=
cudaBuffer
.
getDimension
();
return
cudaBuffer
.
retrieveImage
();
imageDims
=
g_
cudaBuffer
->
getDimension
();
return
g_
cudaBuffer
->
retrieveImage
();
}
unsigned
int
*
retrieveHistogram
(
const
MexImagePixelType
*
image
,
Vec
<
unsigned
int
>&
imageDims
,
int
&
returnSize
)
{
CudaImageBuffer
<
unsigned
char
>
cudaBuffer
(
imageDims
,
true
);
cudaBuffer
.
loadImage
(
image
,
imageDims
);
set
(
imageDims
);
g_
cudaBuffer
->
loadImage
(
image
,
imageDims
);
return
cudaBuffer
.
retrieveHistogram
(
returnSize
);
return
g_
cudaBuffer
->
retrieveHistogram
(
returnSize
);
}
double
*
retrieveNormalizedHistogram
(
const
MexImagePixelType
*
image
,
Vec
<
unsigned
int
>&
imageDims
,
int
&
returnSize
)
{
CudaImageBuffer
<
unsigned
char
>
cudaBuffer
(
imageDims
,
true
);
cudaBuffer
.
loadImage
(
image
,
imageDims
);
set
(
imageDims
);
g_
cudaBuffer
->
loadImage
(
image
,
imageDims
);
return
cudaBuffer
.
retrieveNormalizedHistogram
(
returnSize
);
return
g_
cudaBuffer
->
retrieveNormalizedHistogram
(
returnSize
);
}
void
thresholdFilter
(
const
MexImagePixelType
*
image
,
MexImagePixelType
*
imageOut
,
Vec
<
unsigned
int
>
imageDims
,
double
threshold
)
{
CudaImageBuffer
<
unsigned
char
>
cudaBuffer
(
imageDims
,
true
);
cudaBuffer
.
loadImage
(
image
,
imageDims
);
set
(
imageDims
);
g_
cudaBuffer
->
loadImage
(
image
,
imageDims
);
cudaBuffer
.
thresholdFilter
(
threshold
);
g_
cudaBuffer
->
thresholdFilter
(
threshold
);
cudaBuffer
.
retrieveImage
(
imageOut
);
g_
cudaBuffer
->
retrieveImage
(
imageOut
);
}
void
unmix
(
const
MexImagePixelType
*
image1
,
const
MexImagePixelType
*
image2
,
MexImagePixelType
*
imageOut
,
Vec
<
unsigned
int
>
imageDims
,
Vec
<
unsigned
int
>
neighborhood
)
{
CudaImageBuffer
<
unsigned
char
>
cudaBuffer1
(
imageDims
,
true
);
CudaImageBuffer
<
unsigned
char
>
cudaBuffer
2
(
imageDims
,
true
);
cudaBuffer
1
.
loadImage
(
image1
,
imageDims
);
cudaBuffer2
.
loadImage
(
image2
,
imageDims
);
set
(
imageDims
);
set
2
(
imageDims
);
g_
cudaBuffer
->
loadImage
(
image1
,
imageDims
);
g_
cudaBuffer2
->
loadImage
(
image2
,
imageDims
);
cudaBuffer
1
.
unmix
(
&
cudaBuffer2
,
neighborhood
);
g_
cudaBuffer
->
unmix
(
g_
cudaBuffer2
,
neighborhood
);
cudaBuffer
1
.
retrieveImage
(
imageOut
);
g_
cudaBuffer
->
retrieveImage
(
imageOut
);
}
\ No newline at end of file
This diff is collapsed.
Click to expand it.
src/c/CudaMex/Process.h
+
1
−
0
View file @
76f3b582
...
...
@@ -3,6 +3,7 @@
typedef
unsigned
char
MexImagePixelType
;
void
clear
();
void
addConstant
(
const
MexImagePixelType
*
image
,
MexImagePixelType
*
imageOut
,
Vec
<
unsigned
int
>
imageDims
,
double
additive
);
void
addImageWith
(
const
MexImagePixelType
*
image1
,
const
MexImagePixelType
*
image2
,
MexImagePixelType
*
imageOut
,
Vec
<
unsigned
int
>
imageDims
,
double
factor
);
void
applyPolyTransformation
(
const
MexImagePixelType
*
image
,
MexImagePixelType
*
imageOut
,
Vec
<
unsigned
int
>
imageDims
,
double
a
,
double
b
,
double
c
,
MexImagePixelType
minValue
,
MexImagePixelType
maxValue
);
...
...
This diff is collapsed.
Click to expand it.
Preview
0%
Loading
Try again
or
attach a new file
.
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Save comment
Cancel
Please
register
or
sign in
to comment