[FFmpeg-devel] libavfilter: Add dehaze-filter option in existing derain filter.

Submitted by Xuewei Meng on Aug. 22, 2019, 9:08 a.m.

Details

Message ID 20190822090827.111-1-xwmeng96@gmail.com
State New
Headers show

Commit Message

Xuewei Meng Aug. 22, 2019, 9:08 a.m.
Add the support of dehaze filter in existing derain filter source
code. As the processing procedure in FFmpeg is the same for current
derain and dehaze, we reuse the derain filter source code. The
model training and generation scripts are in repo
https://github.com/XueweiMeng/derain_filter.git.

Signed-off-by: Xuewei Meng <xwmeng96@gmail.com>
---
 doc/filters.texi        | 14 +++++++++++++-
 libavfilter/vf_derain.c | 13 +++++++++----
 2 files changed, 22 insertions(+), 5 deletions(-)

Comments

Steven Liu Aug. 22, 2019, 9:16 a.m.
> 在 2019年8月22日,下午5:08,Xuewei Meng <xwmeng96@gmail.com> 写道:
> 
> Add the support of dehaze filter in existing derain filter source
> code. As the processing procedure in FFmpeg is the same for current
> derain and dehaze, we reuse the derain filter source code. The
> model training and generation scripts are in repo
> https://github.com/XueweiMeng/derain_filter.git.
> 
> Signed-off-by: Xuewei Meng <xwmeng96@gmail.com>
> ---
> doc/filters.texi        | 14 +++++++++++++-
> libavfilter/vf_derain.c | 13 +++++++++----
> 2 files changed, 22 insertions(+), 5 deletions(-)
> 
> diff --git a/doc/filters.texi b/doc/filters.texi
> index 323c02970e..49fc030489 100644
> --- a/doc/filters.texi
> +++ b/doc/filters.texi
> @@ -8431,7 +8431,7 @@ delogo=x=0:y=0:w=100:h=77:band=10
> 
> @section derain
> 
> -Remove the rain in the input image/video by applying the derain methods based on
> +Remove the rain/haze in the input image/video by applying the derain/dehaze methods based on
> convolutional neural networks. Supported models:
> 
> @itemize
> @@ -8449,6 +8449,18 @@ files (.pb) by using tools/python/convert.py
> The filter accepts the following options:
> 
> @table @option
> +@item filter_type
> +Specify which filter to use. This option accepts the following values:
> +
> +@table @samp
> +@item derain
> +Derain filter. To conduct derain filter, you need to use a derain model.
> +
> +@item dehaze
> +Dehaze filter. To conduct dehaze filter, you need to use a dehaze model.
> +@end table
> +Default value is @samp{derain}.
> +
> @item dnn_backend
> Specify which DNN backend to use for model loading and execution. This option accepts
> the following values:
> diff --git a/libavfilter/vf_derain.c b/libavfilter/vf_derain.c
> index c380b40122..b33c37bfb4 100644
> --- a/libavfilter/vf_derain.c
> +++ b/libavfilter/vf_derain.c
> @@ -35,6 +35,7 @@ typedef struct DRContext {
>     const AVClass *class;
> 
>     char              *model_filename;
> +    int                filter_type;
>     DNNBackendType     backend_type;
>     DNNModule         *dnn_module;
>     DNNModel          *model;
> @@ -46,12 +47,16 @@ typedef struct DRContext {
> #define OFFSET(x) offsetof(DRContext, x)
> #define FLAGS AV_OPT_FLAG_FILTERING_PARAM | AV_OPT_FLAG_VIDEO_PARAM
> static const AVOption derain_options[] = {
> -    { "dnn_backend", "DNN backend",             OFFSET(backend_type),   AV_OPT_TYPE_INT,    { .i64 = 0 },    0, 1, FLAGS, "backend" },
> -    { "native",      "native backend flag",     0,                      AV_OPT_TYPE_CONST,  { .i64 = 0 },    0, 0, FLAGS, "backend" },
> +    { "filter_type", "filter type(derain/dehaze)",  OFFSET(filter_type),    AV_OPT_TYPE_INT,    { .i64 = 0 },    0, 1, FLAGS, "type" },
> +    { "derain",      "derain filter flag",          0,                      AV_OPT_TYPE_CONST,  { .i64 = 0 },    0, 0, FLAGS, "type" },
> +    { "dehaze",      "dehaze filter flag",          0,                      AV_OPT_TYPE_CONST,  { .i64 = 1 },    0, 0, FLAGS, "type" },
> +
> +    { "dnn_backend", "DNN backend",                 OFFSET(backend_type),   AV_OPT_TYPE_INT,    { .i64 = 0 },    0, 1, FLAGS, "backend" },
This should no modify context.

> +    { "native",      "native backend flag",         0,                      AV_OPT_TYPE_CONST,  { .i64 = 0 },    0, 0, FLAGS, "backend" },
This should no modify context.

> #if (CONFIG_LIBTENSORFLOW == 1)
> -    { "tensorflow",  "tensorflow backend flag", 0,                      AV_OPT_TYPE_CONST,  { .i64 = 1 },    0, 0, FLAGS, "backend" },
> +    { "tensorflow",  "tensorflow backend flag",     0,                      AV_OPT_TYPE_CONST,  { .i64 = 1 },    0, 0, FLAGS, "backend" },
This should no modify context.

> #endif
> -    { "model",       "path to model file",      OFFSET(model_filename), AV_OPT_TYPE_STRING, { .str = NULL }, 0, 0, FLAGS },
> +    { "model",       "path to model file",          OFFSET(model_filename), AV_OPT_TYPE_STRING, { .str = NULL }, 0, 0, FLAGS },
This should no modify context.
>     { NULL }
> };
> 
maybe only need add tree parameters, is it?
> -- 
> 2.17.1
> 
> _______________________________________________
> ffmpeg-devel mailing list
> ffmpeg-devel@ffmpeg.org
> https://ffmpeg.org/mailman/listinfo/ffmpeg-devel
> 
> To unsubscribe, visit link above, or email
> ffmpeg-devel-request@ffmpeg.org with subject "unsubscribe".

Patch hide | download patch | download mbox

diff --git a/doc/filters.texi b/doc/filters.texi
index 323c02970e..49fc030489 100644
--- a/doc/filters.texi
+++ b/doc/filters.texi
@@ -8431,7 +8431,7 @@  delogo=x=0:y=0:w=100:h=77:band=10
 
 @section derain
 
-Remove the rain in the input image/video by applying the derain methods based on
+Remove the rain/haze in the input image/video by applying the derain/dehaze methods based on
 convolutional neural networks. Supported models:
 
 @itemize
@@ -8449,6 +8449,18 @@  files (.pb) by using tools/python/convert.py
 The filter accepts the following options:
 
 @table @option
+@item filter_type
+Specify which filter to use. This option accepts the following values:
+
+@table @samp
+@item derain
+Derain filter. To conduct derain filter, you need to use a derain model.
+
+@item dehaze
+Dehaze filter. To conduct dehaze filter, you need to use a dehaze model.
+@end table
+Default value is @samp{derain}.
+
 @item dnn_backend
 Specify which DNN backend to use for model loading and execution. This option accepts
 the following values:
diff --git a/libavfilter/vf_derain.c b/libavfilter/vf_derain.c
index c380b40122..b33c37bfb4 100644
--- a/libavfilter/vf_derain.c
+++ b/libavfilter/vf_derain.c
@@ -35,6 +35,7 @@  typedef struct DRContext {
     const AVClass *class;
 
     char              *model_filename;
+    int                filter_type;
     DNNBackendType     backend_type;
     DNNModule         *dnn_module;
     DNNModel          *model;
@@ -46,12 +47,16 @@  typedef struct DRContext {
 #define OFFSET(x) offsetof(DRContext, x)
 #define FLAGS AV_OPT_FLAG_FILTERING_PARAM | AV_OPT_FLAG_VIDEO_PARAM
 static const AVOption derain_options[] = {
-    { "dnn_backend", "DNN backend",             OFFSET(backend_type),   AV_OPT_TYPE_INT,    { .i64 = 0 },    0, 1, FLAGS, "backend" },
-    { "native",      "native backend flag",     0,                      AV_OPT_TYPE_CONST,  { .i64 = 0 },    0, 0, FLAGS, "backend" },
+    { "filter_type", "filter type(derain/dehaze)",  OFFSET(filter_type),    AV_OPT_TYPE_INT,    { .i64 = 0 },    0, 1, FLAGS, "type" },
+    { "derain",      "derain filter flag",          0,                      AV_OPT_TYPE_CONST,  { .i64 = 0 },    0, 0, FLAGS, "type" },
+    { "dehaze",      "dehaze filter flag",          0,                      AV_OPT_TYPE_CONST,  { .i64 = 1 },    0, 0, FLAGS, "type" },
+
+    { "dnn_backend", "DNN backend",                 OFFSET(backend_type),   AV_OPT_TYPE_INT,    { .i64 = 0 },    0, 1, FLAGS, "backend" },
+    { "native",      "native backend flag",         0,                      AV_OPT_TYPE_CONST,  { .i64 = 0 },    0, 0, FLAGS, "backend" },
 #if (CONFIG_LIBTENSORFLOW == 1)
-    { "tensorflow",  "tensorflow backend flag", 0,                      AV_OPT_TYPE_CONST,  { .i64 = 1 },    0, 0, FLAGS, "backend" },
+    { "tensorflow",  "tensorflow backend flag",     0,                      AV_OPT_TYPE_CONST,  { .i64 = 1 },    0, 0, FLAGS, "backend" },
 #endif
-    { "model",       "path to model file",      OFFSET(model_filename), AV_OPT_TYPE_STRING, { .str = NULL }, 0, 0, FLAGS },
+    { "model",       "path to model file",          OFFSET(model_filename), AV_OPT_TYPE_STRING, { .str = NULL }, 0, 0, FLAGS },
     { NULL }
 };