nareshmlx/opencv-pr huggingface dataset:
**File:** modules/dnn/test/test_onnx_importer.cpp
**Change Type:** added
**Context:** PR #12071: Added ONNX parser with AlexNet support - **Merge with extra**: https://github.com/opencv/opencv_extra/pull/499 related #11008 ``` force_bui...

**Code Changes:**
```diff
@@ -0,0 +1,344 @@
+// This file is part of OpenCV project.
+// It is subject to the license terms in the LICENSE file found in the top-level directory
+// of this distribution and at http://opencv.org/license.html.
+
+// Copyright (C) 2018, Intel Corporation, all rights reserved.
+// Third party copyrights are property of their respective owners.
+
+
+#include "test_precomp.hpp"
```

Review comment:
It looks like we can use functionality of `testLayerUsingONNXModels` to test these models. Can you rename it more generally and replace similar testing code?
**File:** modules/dnn/test/test_onnx_importer.cpp
**Change Type:** added
**Context:** PR #12071: Added ONNX parser with AlexNet support - **Merge with extra**: https://github.com/opencv/opencv_extra/pull/499 related #11008 ``` force_bui...

**Code Changes:**
```diff
@@ -0,0 +1,344 @@
+// This file is part of OpenCV project.
+// It is subject to the license terms in the LICENSE file found in the top-level directory
+// of this distribution and at http://opencv.org/license.html.
+
+// Copyright (C) 2018, Intel Corporation, all rights reserved.
+// Third party copyrights are property of their respective owners.
+
+
+#include "test_precomp.hpp"
```

Review comment:
This test is failed with `DNN_BACKEND_INFERENCE_ENGINE` and `DNN_TARGET_OPENCL`, `DNN_TARGET_OPENCL_FP16` targets. Can you add a skip exception?
**File:** modules/dnn/src/onnx/onnx_importer.cpp
**Change Type:** added
**Context:** PR #12071: Added ONNX parser with AlexNet support - **Merge with extra**: https://github.com/opencv/opencv_extra/pull/499 related #11008 ``` force_bui...

**Code Changes:**
```diff
@@ -0,0 +1,585 @@
+// This file is part of OpenCV project.
+// It is subject to the license terms in the LICENSE file found in the top-level directory
+// of this distribution and at http://opencv.org/license.html.
+
+// Copyright (C) 2018, Intel Corporation, all rights reserved.
+// Third party copyrights are property of their respective owners.
+
+#include "../precomp.hpp"
+
```

Review comment:
It's better to call only `convertTo` here without in-place conversions: ```cpp Mat(sizes, CV_64FC1, (void*)field.data()).convertTo(blob, CV_32FC1); ```
**File:** modules/dnn/src/onnx/onnx_importer.cpp
**Change Type:** added
**Context:** PR #12071: Added ONNX parser with AlexNet support - **Merge with extra**: https://github.com/opencv/opencv_extra/pull/499 related #11008 ``` force_bui...

**Code Changes:**
```diff
@@ -0,0 +1,585 @@
+// This file is part of OpenCV project.
+// It is subject to the license terms in the LICENSE file found in the top-level directory
+// of this distribution and at http://opencv.org/license.html.
+
+// Copyright (C) 2018, Intel Corporation, all rights reserved.
+// Third party copyrights are property of their respective owners.
+
+#include "../precomp.hpp"
+
```

Review comment:
It looks like we can just get a pointer to `int64` data inside an if-else condition but move similar conversion code outside it.
**File:** modules/dnn/src/onnx/onnx_importer.cpp
**Change Type:** added
**Context:** PR #12071: Added ONNX parser with AlexNet support - **Merge with extra**: https://github.com/opencv/opencv_extra/pull/499 related #11008 ``` force_bui...

**Code Changes:**
```diff
@@ -0,0 +1,585 @@
+// This file is part of OpenCV project.
+// It is subject to the license terms in the LICENSE file found in the top-level directory
+// of this distribution and at http://opencv.org/license.html.
+
+// Copyright (C) 2018, Intel Corporation, all rights reserved.
+// Third party copyrights are property of their respective owners.
+
+#include "../precomp.hpp"
+
```

Review comment:
For now we can manage `attribute_proto.has_t()` (see above).
**File:** modules/dnn/src/onnx/onnx_importer.cpp
**Change Type:** added
**Context:** PR #12071: Added ONNX parser with AlexNet support - **Merge with extra**: https://github.com/opencv/opencv_extra/pull/499 related #11008 ``` force_bui...

**Code Changes:**
```diff
@@ -0,0 +1,585 @@
+// This file is part of OpenCV project.
+// It is subject to the license terms in the LICENSE file found in the top-level directory
+// of this distribution and at http://opencv.org/license.html.
+
+// Copyright (C) 2018, Intel Corporation, all rights reserved.
+// Third party copyrights are property of their respective owners.
+
+#include "../precomp.hpp"
+
```

Review comment:
`count` equals to `netInputs.size() - 1`. So we can remove it.
**File:** modules/dnn/src/onnx/onnx_importer.cpp
**Change Type:** added
**Context:** PR #12071: Added ONNX parser with AlexNet support - **Merge with extra**: https://github.com/opencv/opencv_extra/pull/499 related #11008 ``` force_bui...

**Code Changes:**
```diff
@@ -0,0 +1,585 @@
+// This file is part of OpenCV project.
+// It is subject to the license terms in the LICENSE file found in the top-level directory
+// of this distribution and at http://opencv.org/license.html.
+
+// Copyright (C) 2018, Intel Corporation, all rights reserved.
+// Third party copyrights are property of their respective owners.
+
+#include "../precomp.hpp"
+
```

Review comment:
Please put `graph_proto.input(j).name())` to some temporal variable to remove duplications: ``` const std::string& name = graph_proto.input(j).name()); ```
**File:** modules/dnn/src/onnx/onnx_importer.cpp
**Change Type:** added
**Context:** PR #12071: Added ONNX parser with AlexNet support - **Merge with extra**: https://github.com/opencv/opencv_extra/pull/499 related #11008 ``` force_bui...

**Code Changes:**
```diff
@@ -0,0 +1,585 @@
+// This file is part of OpenCV project.
+// It is subject to the license terms in the LICENSE file found in the top-level directory
+// of this distribution and at http://opencv.org/license.html.
+
+// Copyright (C) 2018, Intel Corporation, all rights reserved.
+// Third party copyrights are property of their respective owners.
+
+#include "../precomp.hpp"
+
```

Review comment:
We use count to know id input. Max id = netInputs.size() -1, min = 0.
**File:** modules/dnn/src/onnx/onnx_importer.cpp
**Change Type:** added
**Context:** PR #12071: Added ONNX parser with AlexNet support - **Merge with extra**: https://github.com/opencv/opencv_extra/pull/499 related #11008 ``` force_bui...

**Code Changes:**
```diff
@@ -0,0 +1,585 @@
+// This file is part of OpenCV project.
+// It is subject to the license terms in the LICENSE file found in the top-level directory
+// of this distribution and at http://opencv.org/license.html.
+
+// Copyright (C) 2018, Intel Corporation, all rights reserved.
+// Third party copyrights are property of their respective owners.
+
+#include "../precomp.hpp"
+
```

Review comment:
`node_proto.output(0)` -> `layerParams.name`
**File:** modules/dnn/src/onnx/onnx_importer.cpp
**Change Type:** added
**Context:** PR #12071: Added ONNX parser with AlexNet support - **Merge with extra**: https://github.com/opencv/opencv_extra/pull/499 related #11008 ``` force_bui...

**Code Changes:**
```diff
@@ -0,0 +1,585 @@
+// This file is part of OpenCV project.
+// It is subject to the license terms in the LICENSE file found in the top-level directory
+// of this distribution and at http://opencv.org/license.html.
+
+// Copyright (C) 2018, Intel Corporation, all rights reserved.
+// Third party copyrights are property of their respective owners.
+
+#include "../precomp.hpp"
+
```

Review comment:
Try to cast a mat with shapes to std::vector: ```cpp std::vector<int> dims = blob; ```
**File:** modules/dnn/src/onnx/onnx_importer.cpp
**Change Type:** added
**Context:** PR #12071: Added ONNX parser with AlexNet support - **Merge with extra**: https://github.com/opencv/opencv_extra/pull/499 related #11008 ``` force_bui...

**Code Changes:**
```diff
@@ -0,0 +1,585 @@
+// This file is part of OpenCV project.
+// It is subject to the license terms in the LICENSE file found in the top-level directory
+// of this distribution and at http://opencv.org/license.html.
+
+// Copyright (C) 2018, Intel Corporation, all rights reserved.
+// Third party copyrights are property of their respective owners.
+
+#include "../precomp.hpp"
+
```

Review comment:
But both `netInputs.size()` and `count` increase together in this loop.
**File:** modules/dnn/src/onnx/onnx_importer.cpp
**Change Type:** added
**Context:** PR #12071: Added ONNX parser with AlexNet support - **Merge with extra**: https://github.com/opencv/opencv_extra/pull/499 related #11008 ``` force_bui...

**Code Changes:**
```diff
@@ -0,0 +1,585 @@
+// This file is part of OpenCV project.
+// It is subject to the license terms in the LICENSE file found in the top-level directory
+// of this distribution and at http://opencv.org/license.html.
+
+// Copyright (C) 2018, Intel Corporation, all rights reserved.
+// Third party copyrights are property of their respective owners.
+
+#include "../precomp.hpp"
+
```

Review comment:
Yes, I understood.
**File:** modules/dnn/src/dnn.cpp
**Change Type:** modified
**Context:** PR #12071: Added ONNX parser with AlexNet support - **Merge with extra**: https://github.com/opencv/opencv_extra/pull/499 related #11008 ``` force_bui...

**Code Changes:**
```diff
@@ -3437,6 +3437,10 @@ Net readNet(const String& _model, const String& _config, const String& _framewor
             std::swap(model, config);
         return readNetFromModelOptimizer(config, model);
     }
+    if (framework == "onnx" || modelExt == "onnx")
+    {
+        return readNetFromONNX(model);
+    }
     CV_Error(Error::StsError, "Cannot determine an origin framework of files: " +
                                       model + (config.empty() ? "" : ", " + config));
```

Review comment:
Does `configExt` check correct here? If yes, then we should pass "config" instead of "model" for `readNetFromONNX()` call.
**File:** modules/dnn/src/onnx/onnx_importer.cpp
**Change Type:** added
**Context:** PR #12071: Added ONNX parser with AlexNet support - **Merge with extra**: https://github.com/opencv/opencv_extra/pull/499 related #11008 ``` force_bui...

**Code Changes:**
```diff
@@ -0,0 +1,585 @@
+// This file is part of OpenCV project.
+// It is subject to the license terms in the LICENSE file found in the top-level directory
+// of this distribution and at http://opencv.org/license.html.
+
+// Copyright (C) 2018, Intel Corporation, all rights reserved.
+// Third party copyrights are property of their respective owners.
+
+#include "../precomp.hpp"
+
```

Review comment:
`CV_Error()` can't be used outside of functions.
**File:** modules/dnn/src/dnn.cpp
**Change Type:** modified
**Context:** PR #12264: Remove one of forward methods from dnn layers -  ### This pullrequest changes Mark forward with `Mat*` from dnn as deprecated ```cpp virtua...

**Code Changes:**
```diff
@@ -430,19 +430,24 @@ struct DataLayer : public Layer
                backendId == DNN_BACKEND_INFERENCE_ENGINE && inputsData.size() == 1;
     }
 
-    void forward(InputArrayOfArrays inputs, OutputArrayOfArrays outputs, OutputArrayOfArrays internals) CV_OVERRIDE
+    void forward(InputArrayOfArrays inputs_arr, OutputArrayOfArrays outputs_arr, OutputArrayOfArrays internals_arr) CV_OVERRIDE
     {
         CV_TRACE_FUNCTION();
         CV_TRACE_ARG_VALUE(name, "name", name.c_str());
 
```

Review comment:
`CV_OCL_RUN()` should contain OpenCL-related calls only. It is just a "hook" for OpenCL processing. Why is `forward_fallback` here? What is the real purpose of "fallback" call?
**File:** modules/dnn/src/dnn.cpp
**Change Type:** modified
**Context:** PR #12264: Remove one of forward methods from dnn layers -  ### This pullrequest changes Mark forward with `Mat*` from dnn as deprecated ```cpp virtua...

**Code Changes:**
```diff
@@ -430,19 +430,24 @@ struct DataLayer : public Layer
                backendId == DNN_BACKEND_INFERENCE_ENGINE && inputsData.size() == 1;
     }
 
-    void forward(InputArrayOfArrays inputs, OutputArrayOfArrays outputs, OutputArrayOfArrays internals) CV_OVERRIDE
+    void forward(InputArrayOfArrays inputs_arr, OutputArrayOfArrays outputs_arr, OutputArrayOfArrays internals_arr) CV_OVERRIDE
     {
         CV_TRACE_FUNCTION();
         CV_TRACE_ARG_VALUE(name, "name", name.c_str());
 
```

Review comment:
`forward_fallback` calls Layer's forward method converting FP16 mats to FP32 and back to FP16 after `forward`. For now, `forward_fallback` calls forward with `std::vector<Mat*>` but in this PR we remove it. In this PR an every forward looks like ```cpp void forward(InputArrayOfArrays inputs_arr, OutputArrayOfArrays outputs_arr, OutputArrayOfArrays internals_arr) CV_OVERRIDE { CV_TRACE_FUNCTION(); CV_TRACE_ARG_VALUE(name, "name", name.c_str()); CV_OCL_RUN(IS_DNN_OPENCL_TARGET(preferableTarget) && forward_ocl(inputs_arr, outputs_arr, internals_arr)) if (inputs_arr.depth() == CV_16S) { forward_fallback(inputs_arr, outputs_arr, internals_arr); return; } // Get Mats from input arrays and perform default CPU implementation // ... } ```
**File:** modules/imgproc/src/smooth.cpp
**Change Type:** modified
**Context:** PR #12073: Bit-exact GaussianBlur reworked to use wide intrinsics - ### This pullrequest changes Bit-exact GaussianBlur reworked to use wide intrinsic...

**Code Changes:**
```diff
@@ -1820,22 +1820,13 @@ template <>
 void hlineSmooth1N<uint8_t, ufixedpoint16>(const uint8_t* src, int cn, const ufixedpoint16* m, int, ufixedpoint16* dst, int len, int)
 {
     int lencn = len*cn;
-    v_uint16x8 v_mul = v_setall_u16(*((uint16_t*)m));
     int i = 0;
-    for (; i <= lencn - 16; i += 16)
-    {
-        v_uint8x16 v_src = v_load(src + i);
-        v_uint16x8 v_tmp0, v_tmp1;
```

Review comment:
May be add `.as_uint16()` (or something like `.reinterpter_as_u16()`) method? This will be look more readable: ``` m[0].as_uint16() m[1].as_uint16() m[2].as_uint16() m[3].as_uint16() m[4].as_uint16() ```
**File:** modules/imgproc/src/smooth.cpp
**Change Type:** modified
**Context:** PR #12073: Bit-exact GaussianBlur reworked to use wide intrinsics - ### This pullrequest changes Bit-exact GaussianBlur reworked to use wide intrinsic...

**Code Changes:**
```diff
@@ -1820,22 +1820,13 @@ template <>
 void hlineSmooth1N<uint8_t, ufixedpoint16>(const uint8_t* src, int cn, const ufixedpoint16* m, int, ufixedpoint16* dst, int len, int)
 {
     int lencn = len*cn;
-    v_uint16x8 v_mul = v_setall_u16(*((uint16_t*)m));
     int i = 0;
-    for (; i <= lencn - 16; i += 16)
-    {
-        v_uint8x16 v_src = v_load(src + i);
-        v_uint16x8 v_tmp0, v_tmp1;
```

Review comment:
May be avoid redundant code to improve readability (compiler is able to optimize this in anyway): ``` const int16_t* pSrc0 = (const int16_t*)src[j] + i; const int16_t* pSrc1 = (const int16_t*)src[j + 1] + i; v_src00 = vx_load(pSrc0); v_src01 = vx_load(pSrc0 + VECSZ); v_src02 = vx_load(pSrc0 + 2*VECSZ); v_src03 = vx_load(pSrc0 + i + 3*VECSZ); v_src10 = vx_load(pSrc1); v_src11 = vx_load(pSrc1 + VECSZ); v_src12 = vx_load(pSrc1 + 2*VECSZ); v_src13 = vx_load(pSrc1 + i + 3*VECSZ); ```
**File:** modules/imgproc/src/smooth.cpp
**Change Type:** modified
**Context:** PR #12073: Bit-exact GaussianBlur reworked to use wide intrinsics - ### This pullrequest changes Bit-exact GaussianBlur reworked to use wide intrinsic...

**Code Changes:**
```diff
@@ -1820,22 +1820,13 @@ template <>
 void hlineSmooth1N<uint8_t, ufixedpoint16>(const uint8_t* src, int cn, const ufixedpoint16* m, int, ufixedpoint16* dst, int len, int)
 {
     int lencn = len*cn;
-    v_uint16x8 v_mul = v_setall_u16(*((uint16_t*)m));
     int i = 0;
-    for (; i <= lencn - 16; i += 16)
-    {
-        v_uint8x16 v_src = v_load(src + i);
-        v_uint16x8 v_tmp0, v_tmp1;
```

Review comment:
This variable is used inside of loop only. Loop will not run if "len < 4*VECSZ". Is initial value from line 3229 used anywhere? > v_int32 v_128_4 = vx_setall_s32(128 << 16); May be add minimal length "if" check for all optimization block right after `#if CV_SIMD`?
**File:** modules/imgproc/src/smooth.cpp
**Change Type:** modified
**Context:** PR #12073: Bit-exact GaussianBlur reworked to use wide intrinsics - ### This pullrequest changes Bit-exact GaussianBlur reworked to use wide intrinsic...

**Code Changes:**
```diff
@@ -1820,22 +1820,13 @@ template <>
 void hlineSmooth1N<uint8_t, ufixedpoint16>(const uint8_t* src, int cn, const ufixedpoint16* m, int, ufixedpoint16* dst, int len, int)
 {
     int lencn = len*cn;
-    v_uint16x8 v_mul = v_setall_u16(*((uint16_t*)m));
     int i = 0;
-    for (; i <= lencn - 16; i += 16)
-    {
-        v_uint8x16 v_src = v_load(src + i);
-        v_uint16x8 v_tmp0, v_tmp1;
```

Review comment:
Does we still need this optimization branch? BTW, There is [zero coverage](http://pullrequest.opencv.org/buildbot/export/opencv_releases/master_coverage-lin64-debug/20180727-005450_10527/coverage_html/opencv/modules/imgproc/src/smooth.cpp.gcov.html) for line.
**File:** modules/imgproc/src/smooth.cpp
**Change Type:** modified
**Context:** PR #12073: Bit-exact GaussianBlur reworked to use wide intrinsics - ### This pullrequest changes Bit-exact GaussianBlur reworked to use wide intrinsic...

**Code Changes:**
```diff
@@ -1820,22 +1820,13 @@ template <>
 void hlineSmooth1N<uint8_t, ufixedpoint16>(const uint8_t* src, int cn, const ufixedpoint16* m, int, ufixedpoint16* dst, int len, int)
 {
     int lencn = len*cn;
-    v_uint16x8 v_mul = v_setall_u16(*((uint16_t*)m));
     int i = 0;
-    for (; i <= lencn - 16; i += 16)
-    {
-        v_uint8x16 v_src = v_load(src + i);
-        v_uint16x8 v_tmp0, v_tmp1;
```

Review comment:
agree, as long as we convert the code to wide universal intrinsics, we should avoid other custom branches; it's better to add more optimal code paths into universal intrinsics or even create new higher-level universal intrinsics when needed
**File:** modules/imgproc/src/smooth.cpp
**Change Type:** modified
**Context:** PR #12073: Bit-exact GaussianBlur reworked to use wide intrinsics - ### This pullrequest changes Bit-exact GaussianBlur reworked to use wide intrinsic...

**Code Changes:**
```diff
@@ -1820,22 +1820,13 @@ template <>
 void hlineSmooth1N<uint8_t, ufixedpoint16>(const uint8_t* src, int cn, const ufixedpoint16* m, int, ufixedpoint16* dst, int len, int)
 {
     int lencn = len*cn;
-    v_uint16x8 v_mul = v_setall_u16(*((uint16_t*)m));
     int i = 0;
-    for (; i <= lencn - 16; i += 16)
-    {
-        v_uint8x16 v_src = v_load(src + i);
-        v_uint16x8 v_tmp0, v_tmp1;
```

Review comment:
> 2 * VECSZ Does manual unrolling still necessary ?
**File:** modules/imgproc/test/test_distancetransform.cpp
**Change Type:** modified
**Context:** PR #12278: Fix bug in distanceTransform

**Code Changes:**
```diff
@@ -283,4 +283,23 @@ void CV_DisTransTest::prepare_to_validation( int /*test_case_idx*/ )
 
 TEST(Imgproc_DistanceTransform, accuracy) { CV_DisTransTest test; test.safe_run(); }
 
+BIGDATA_TEST(Imgproc_DistanceTransform, large_image_12218)
+{
+    const int lls_maxcnt = 79992000;   // labels's maximum count
+    const int lls_mincnt = 1;          // labels's minimum count
+    int i, j, nz;
+    Mat src(8000, 20000, CV_8UC1), dst, labels;
```

Review comment:
Don't use manual pointer arithmetic. At least there is mess of int / float types: > _dst = dst.ptr<int> > (float*)(_dst + i*dststep) These "row" pointer should be received like this: ``` const float* d1 = dst.ptr<const float>(i); const float* d2 = ans.ptr<const float>(i); ``` Anyway, this heavy loop is just a duplicate of existed norm function. So while check can be replaced to this: ``` EXPECT_LE(cvtest::norm(dst, ans, NORM_INF), 1e-3); ```
**File:** modules/imgproc/test/test_distancetransform.cpp
**Change Type:** modified
**Context:** PR #12278: Fix bug in distanceTransform

**Code Changes:**
```diff
@@ -283,4 +283,23 @@ void CV_DisTransTest::prepare_to_validation( int /*test_case_idx*/ )
 
 TEST(Imgproc_DistanceTransform, accuracy) { CV_DisTransTest test; test.safe_run(); }
 
+BIGDATA_TEST(Imgproc_DistanceTransform, large_image_12218)
+{
+    const int lls_maxcnt = 79992000;   // labels's maximum count
+    const int lls_mincnt = 1;          // labels's minimum count
+    int i, j, nz;
+    Mat src(8000, 20000, CV_8UC1), dst, labels;
```

Review comment:
> 8192 Magic number from algorithm implementation?
**File:** modules/imgproc/test/test_distancetransform.cpp
**Change Type:** modified
**Context:** PR #12278: Fix bug in distanceTransform

**Code Changes:**
```diff
@@ -283,4 +283,23 @@ void CV_DisTransTest::prepare_to_validation( int /*test_case_idx*/ )
 
 TEST(Imgproc_DistanceTransform, accuracy) { CV_DisTransTest test; test.safe_run(); }
 
+BIGDATA_TEST(Imgproc_DistanceTransform, large_image_12218)
+{
+    const int lls_maxcnt = 79992000;   // labels's maximum count
+    const int lls_mincnt = 1;          // labels's minimum count
+    int i, j, nz;
+    Mat src(8000, 20000, CV_8UC1), dst, labels;
```

Review comment:
Avoid address arithmetic. Use something like this: ``` src.at<uchar>(i, j) = ... ```
**File:** modules/imgproc/test/test_distancetransform.cpp
**Change Type:** modified
**Context:** PR #12278: Fix bug in distanceTransform

**Code Changes:**
```diff
@@ -283,4 +283,23 @@ void CV_DisTransTest::prepare_to_validation( int /*test_case_idx*/ )
 
 TEST(Imgproc_DistanceTransform, accuracy) { CV_DisTransTest test; test.safe_run(); }
 
+BIGDATA_TEST(Imgproc_DistanceTransform, large_image_12218)
+{
+    const int lls_maxcnt = 79992000;   // labels's maximum count
+    const int lls_mincnt = 1;          // labels's minimum count
+    int i, j, nz;
+    Mat src(8000, 20000, CV_8UC1), dst, labels;
```

Review comment:
Element-wise `B = A * alpha + beta` operation can be performed via `cv::convertTo()` call.
**File:** doc/tutorials/imgproc/out_of_focus_deblur_filter/out_of_focus_deblur_filter.markdown
**Change Type:** modified
**Context:** PR #12214: doc: fix English gramma in tutorial out-of-focus-deblur filter - doc: fix English grammar in the tutorial out-of-focus-deblur filter Thanks...
**Review Line:** 12

**Code Changes:**
```diff
--   what is PSF of out-of-focus image
+-   what a degradation image model is
+-   what the PSF of an out-of-focus image is
 -   how to restore a blurred image
--   what is Wiener filter
+-   what is a Wiener filter
 
 Theory
 ------
 
-@note The explanation is based on the books @cite gonzalez and @cite gruzman. Also, you can refer to Matlab's tutorial [Image Deblurring in Matlab] and an article [SmartDeblur].
```

Review comment:
> what a Wiener filter is same correction than above?
**File:** doc/tutorials/imgproc/out_of_focus_deblur_filter/out_of_focus_deblur_filter.markdown
**Change Type:** modified
**Context:** PR #12214: doc: fix English gramma in tutorial out-of-focus-deblur filter - doc: fix English grammar in the tutorial out-of-focus-deblur filter Thanks...
**Review Line:** 43

**Code Changes:**
```diff
 \f[U' = H_w\cdot S\f]
 
 where
-\f$U'\f$ is spectrum of estimation of original image \f$U\f$,
-\f$H_w\f$ is restoration filter, for example, Wiener filter.
+\f$U'\f$ is the spectrum of estimation of original image \f$U\f$, and
+\f$H_w\f$ is the restoration filter, for example, the Wiener filter.
 
-### What is Wiener filter?
+### What is the Wiener filter?
 
```

Review comment:
> \f$U'\f$ is the estimation spectrum of the original image \f$U\f$, and looks better for me.