Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
Greenplum
Opencv
提交
01d3df0d
O
Opencv
项目概览
Greenplum
/
Opencv
大约 1 年 前同步成功
通知
7
Star
0
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
DevOps
流水线
流水线任务
计划
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
O
Opencv
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
DevOps
DevOps
流水线
流水线任务
计划
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
流水线任务
提交
Issue看板
体验新版 GitCode,发现更多精彩内容 >>
提交
01d3df0d
编写于
3月 24, 2015
作者:
E
Erik Karlsson
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
Added normType parameter to fastNlMeansDenoisingMulti
上级
70a64ebe
变更
2
隐藏空白更改
内联
并排
Showing
2 changed file
with
92 addition
and
37 deletion
+92
-37
modules/photo/include/opencv2/photo.hpp
modules/photo/include/opencv2/photo.hpp
+11
-7
modules/photo/src/denoising.cpp
modules/photo/src/denoising.cpp
+81
-30
未找到文件。
modules/photo/include/opencv2/photo.hpp
浏览文件 @
01d3df0d
...
...
@@ -142,7 +142,8 @@ CV_EXPORTS_W void fastNlMeansDenoising( InputArray src, OutputArray dst, float h
<http://www.ipol.im/pub/algo/bcm_non_local_means_denoising/> with several computational
optimizations. Noise expected to be a gaussian white noise
@param src Input 8-bit 1-channel, 2-channel, 3-channel or 4-channel image.
@param src Input 8-bit or 16-bit (only with NORM_L1) 1-channel,
2-channel, 3-channel or 4-channel image.
@param dst Output image with the same size and type as src .
@param templateWindowSize Size in pixels of the template patch that is used to compute weights.
Should be odd. Recommended value 7 pixels
...
...
@@ -153,7 +154,7 @@ denoising time. Recommended value 21 pixels
parameter applied to all channels or one per channel in dst. Big h value
perfectly removes noise but also removes image details, smaller h
value preserves details but also preserves some noise
@param normType Type of norm used for weight calc
lu
ation. Can be either NORM_L2 or NORM_L1
@param normType Type of norm used for weight calc
ul
ation. Can be either NORM_L2 or NORM_L1
This function expected to be applied to grayscale images. For colored images look at
fastNlMeansDenoisingColored. Advanced usage of this functions can be manual denoising of colored
...
...
@@ -220,9 +221,9 @@ captured in small period of time. For example video. This version of the functio
images or for manual manipulation with colorspaces. For more details see
<http://citeseerx.ist.psu.edu/viewdoc/summary?doi=10.1.1.131.6394>
@param srcImgs Input 8-bit
1-channel, 2-channel, 3-channel or
4-channel images sequence. All images should have the same type an
d
size.
@param srcImgs Input 8-bit
or 16-bit (only with NORM_L1) 1-channel,
2-channel, 3-channel or 4-channel images sequence. All images shoul
d
have the same type and
size.
@param imgToDenoiseIndex Target image to denoise index in srcImgs sequence
@param temporalWindowSize Number of surrounding images to use for target image denoising. Should
be odd. Images from imgToDenoiseIndex - temporalWindowSize / 2 to
...
...
@@ -238,10 +239,13 @@ denoising time. Recommended value 21 pixels
parameter applied to all channels or one per channel in dst. Big h value
perfectly removes noise but also removes image details, smaller h
value preserves details but also preserves some noise
@param normType Type of norm used for weight calculation. Can be either NORM_L2 or NORM_L1
*/
CV_EXPORTS_W
void
fastNlMeansDenoisingMulti
(
InputArrayOfArrays
srcImgs
,
OutputArray
dst
,
int
imgToDenoiseIndex
,
int
temporalWindowSize
,
const
std
::
vector
<
float
>&
h
,
int
templateWindowSize
=
7
,
int
searchWindowSize
=
21
);
int
imgToDenoiseIndex
,
int
temporalWindowSize
,
const
std
::
vector
<
float
>&
h
,
int
templateWindowSize
=
7
,
int
searchWindowSize
=
21
,
int
normType
=
NORM_L2
);
/** @brief Modification of fastNlMeansDenoisingMulti function for colored images sequences
...
...
modules/photo/src/denoising.cpp
浏览文件 @
01d3df0d
...
...
@@ -230,73 +230,55 @@ static void fastNlMeansDenoisingMultiCheckPreconditions(
}
}
void
cv
::
fastNlMeansDenoisingMulti
(
InputArrayOfArrays
_srcImgs
,
OutputArray
_dst
,
int
imgToDenoiseIndex
,
int
temporalWindowSize
,
float
h
,
int
templateWindowSize
,
int
searchWindowSize
)
{
fastNlMeansDenoisingMulti
(
_srcImgs
,
_dst
,
imgToDenoiseIndex
,
temporalWindowSize
,
std
::
vector
<
float
>
(
1
,
h
),
templateWindowSize
,
searchWindowSize
);
}
void
cv
::
fastNlMeansDenoisingMulti
(
InputArrayOfArrays
_srcImgs
,
OutputArray
_dst
,
int
imgToDenoiseIndex
,
int
temporalWindowSize
,
const
std
::
vector
<
float
>&
h
,
int
templateWindowSize
,
int
searchWindowSize
)
template
<
typename
ST
,
typename
IT
,
typename
UIT
,
typename
D
>
static
void
fastNlMeansDenoisingMulti_
(
const
std
::
vector
<
Mat
>&
srcImgs
,
Mat
&
dst
,
int
imgToDenoiseIndex
,
int
temporalWindowSize
,
const
std
::
vector
<
float
>&
h
,
int
templateWindowSize
,
int
searchWindowSize
)
{
std
::
vector
<
Mat
>
srcImgs
;
_srcImgs
.
getMatVector
(
srcImgs
);
fastNlMeansDenoisingMultiCheckPreconditions
(
srcImgs
,
imgToDenoiseIndex
,
temporalWindowSize
,
templateWindowSize
,
searchWindowSize
);
int
hn
=
(
int
)
h
.
size
();
CV_Assert
(
hn
==
1
||
hn
==
CV_MAT_CN
(
srcImgs
[
0
].
type
()));
_dst
.
create
(
srcImgs
[
0
].
size
(),
srcImgs
[
0
].
type
());
Mat
dst
=
_dst
.
getMat
();
switch
(
srcImgs
[
0
].
type
())
{
case
CV_8U
:
parallel_for_
(
cv
::
Range
(
0
,
srcImgs
[
0
].
rows
),
FastNlMeansMultiDenoisingInvoker
<
uchar
,
int
,
unsigned
,
DistSquared
,
int
>
(
FastNlMeansMultiDenoisingInvoker
<
uchar
,
IT
,
UIT
,
D
,
int
>
(
srcImgs
,
imgToDenoiseIndex
,
temporalWindowSize
,
dst
,
templateWindowSize
,
searchWindowSize
,
&
h
[
0
]));
break
;
case
CV_8UC2
:
if
(
hn
==
1
)
parallel_for_
(
cv
::
Range
(
0
,
srcImgs
[
0
].
rows
),
FastNlMeansMultiDenoisingInvoker
<
Vec
2b
,
int
,
unsigned
,
DistSquared
,
int
>
(
FastNlMeansMultiDenoisingInvoker
<
Vec
<
ST
,
2
>
,
IT
,
UIT
,
D
,
int
>
(
srcImgs
,
imgToDenoiseIndex
,
temporalWindowSize
,
dst
,
templateWindowSize
,
searchWindowSize
,
&
h
[
0
]));
else
parallel_for_
(
cv
::
Range
(
0
,
srcImgs
[
0
].
rows
),
FastNlMeansMultiDenoisingInvoker
<
Vec
2b
,
int
,
unsigned
,
DistSquared
,
Vec2i
>
(
FastNlMeansMultiDenoisingInvoker
<
Vec
<
ST
,
2
>
,
IT
,
UIT
,
D
,
Vec2i
>
(
srcImgs
,
imgToDenoiseIndex
,
temporalWindowSize
,
dst
,
templateWindowSize
,
searchWindowSize
,
&
h
[
0
]));
break
;
case
CV_8UC3
:
if
(
hn
==
1
)
parallel_for_
(
cv
::
Range
(
0
,
srcImgs
[
0
].
rows
),
FastNlMeansMultiDenoisingInvoker
<
Vec
3b
,
int
,
unsigned
,
DistSquared
,
int
>
(
FastNlMeansMultiDenoisingInvoker
<
Vec
<
ST
,
3
>
,
IT
,
UIT
,
D
,
int
>
(
srcImgs
,
imgToDenoiseIndex
,
temporalWindowSize
,
dst
,
templateWindowSize
,
searchWindowSize
,
&
h
[
0
]));
else
parallel_for_
(
cv
::
Range
(
0
,
srcImgs
[
0
].
rows
),
FastNlMeansMultiDenoisingInvoker
<
Vec
3b
,
int
,
unsigned
,
DistSquared
,
Vec3i
>
(
FastNlMeansMultiDenoisingInvoker
<
Vec
<
ST
,
3
>
,
IT
,
UIT
,
D
,
Vec3i
>
(
srcImgs
,
imgToDenoiseIndex
,
temporalWindowSize
,
dst
,
templateWindowSize
,
searchWindowSize
,
&
h
[
0
]));
break
;
case
CV_8UC4
:
if
(
hn
==
1
)
parallel_for_
(
cv
::
Range
(
0
,
srcImgs
[
0
].
rows
),
FastNlMeansMultiDenoisingInvoker
<
Vec
4b
,
int
,
unsigned
,
DistSquared
,
int
>
(
FastNlMeansMultiDenoisingInvoker
<
Vec
<
ST
,
4
>
,
IT
,
UIT
,
D
,
int
>
(
srcImgs
,
imgToDenoiseIndex
,
temporalWindowSize
,
dst
,
templateWindowSize
,
searchWindowSize
,
&
h
[
0
]));
else
parallel_for_
(
cv
::
Range
(
0
,
srcImgs
[
0
].
rows
),
FastNlMeansMultiDenoisingInvoker
<
Vec
4b
,
int
,
unsigned
,
DistSquared
,
Vec4i
>
(
FastNlMeansMultiDenoisingInvoker
<
Vec
<
ST
,
4
>
,
IT
,
UIT
,
D
,
Vec4i
>
(
srcImgs
,
imgToDenoiseIndex
,
temporalWindowSize
,
dst
,
templateWindowSize
,
searchWindowSize
,
&
h
[
0
]));
break
;
...
...
@@ -306,6 +288,75 @@ void cv::fastNlMeansDenoisingMulti( InputArrayOfArrays _srcImgs, OutputArray _ds
}
}
void
cv
::
fastNlMeansDenoisingMulti
(
InputArrayOfArrays
_srcImgs
,
OutputArray
_dst
,
int
imgToDenoiseIndex
,
int
temporalWindowSize
,
float
h
,
int
templateWindowSize
,
int
searchWindowSize
)
{
fastNlMeansDenoisingMulti
(
_srcImgs
,
_dst
,
imgToDenoiseIndex
,
temporalWindowSize
,
std
::
vector
<
float
>
(
1
,
h
),
templateWindowSize
,
searchWindowSize
);
}
void
cv
::
fastNlMeansDenoisingMulti
(
InputArrayOfArrays
_srcImgs
,
OutputArray
_dst
,
int
imgToDenoiseIndex
,
int
temporalWindowSize
,
const
std
::
vector
<
float
>&
h
,
int
templateWindowSize
,
int
searchWindowSize
,
int
normType
)
{
std
::
vector
<
Mat
>
srcImgs
;
_srcImgs
.
getMatVector
(
srcImgs
);
fastNlMeansDenoisingMultiCheckPreconditions
(
srcImgs
,
imgToDenoiseIndex
,
temporalWindowSize
,
templateWindowSize
,
searchWindowSize
);
int
hn
=
(
int
)
h
.
size
();
int
type
=
srcImgs
[
0
].
type
(),
depth
=
CV_MAT_DEPTH
(
type
),
cn
=
CV_MAT_CN
(
type
);
CV_Assert
(
hn
==
1
||
hn
==
cn
);
_dst
.
create
(
srcImgs
[
0
].
size
(),
srcImgs
[
0
].
type
());
Mat
dst
=
_dst
.
getMat
();
switch
(
normType
)
{
case
NORM_L2
:
switch
(
depth
)
{
case
CV_8U
:
fastNlMeansDenoisingMulti_
<
uchar
,
int
,
unsigned
,
DistSquared
>
(
srcImgs
,
dst
,
imgToDenoiseIndex
,
temporalWindowSize
,
h
,
templateWindowSize
,
searchWindowSize
);
break
;
default:
CV_Error
(
Error
::
StsBadArg
,
"Unsupported depth! Only CV_8U is supported for NORM_L2"
);
}
break
;
case
NORM_L1
:
switch
(
depth
)
{
case
CV_8U
:
fastNlMeansDenoisingMulti_
<
uchar
,
int
,
unsigned
,
DistAbs
>
(
srcImgs
,
dst
,
imgToDenoiseIndex
,
temporalWindowSize
,
h
,
templateWindowSize
,
searchWindowSize
);
break
;
case
CV_16U
:
fastNlMeansDenoisingMulti_
<
ushort
,
int64
,
uint64
,
DistAbs
>
(
srcImgs
,
dst
,
imgToDenoiseIndex
,
temporalWindowSize
,
h
,
templateWindowSize
,
searchWindowSize
);
break
;
default:
CV_Error
(
Error
::
StsBadArg
,
"Unsupported depth! Only CV_8U and CV_16U are supported for NORM_L1"
);
}
break
;
default:
CV_Error
(
Error
::
StsBadArg
,
"Unsupported norm type! Only NORM_L2 and NORM_L1 are supported"
);
}
}
void
cv
::
fastNlMeansDenoisingColoredMulti
(
InputArrayOfArrays
_srcImgs
,
OutputArray
_dst
,
int
imgToDenoiseIndex
,
int
temporalWindowSize
,
float
h
,
float
hForColorComponents
,
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录