2017-04-05 7 views
0

における局所正規私はpythonでこの記事により同様の機能を実現しようとしています:linkパイソン - OpenCVの

しかし、私は両方の実装を試みたにも関わらず、私がしようと何でも、スムーズな結果を得ることができません修正されたOPおよび第2の回答が提供される。

私はおそらく何か小さなものを見逃していますが、私は何が分かりません。 OPの符号化とIが黒画像で終わるため

def local_norm(img, sigma_1, sigma_2): 

    float_gray = img * cv2.CV_32FC1/255.0 
    blur_1 = int(2 * np.ceil(- norm.ppf(0.05, loc=0, scale=sigma_1)) + 1) 
    blurred_1 = cv2.GaussianBlur(float_gray, (blur_1, blur_1), sigma_1, sigma_1) 
    temp_1 = float_gray - blurred_1 

    temp_2 = cv2.pow(temp_1, 2.0) 
    blur_2 = int(2 * np.ceil(- norm.ppf(0.05, loc=0, scale=sigma_2)) + 1) 
    blurred_2 = cv2.GaussianBlur(temp_2, (blur_2, blur_2), sigma_2, sigma_2) 
    temp_2 = cv2.pow(blurred_2, 0.5) 

    float_gray = temp_1/temp_2 
    res = cv2.normalize(float_gray, 0, 255, cv2.NORM_MINMAX) 
    res = res * cv2.CV_32S 
    return res 

私は終わりに、私はcv2.CV_32Sを正確に使用しなければなりません。残りの部分については、同じシグマ2.0と20.0を使用します。

enter image description here

答えて

1

実装に多少の誤差はだからここにありましたが、Pythonで正しく変換されたコードです:

import cv2 
import numpy as np 

img = cv2.imread('lena.png') 

gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY) 

float_gray = gray.astype(np.float32)/255.0 

blur = cv2.GaussianBlur(float_gray, (0, 0), sigmaX=2, sigmaY=2) 
num = float_gray - blur 

blur = cv2.GaussianBlur(num*num, (0, 0), sigmaX=20, sigmaY=20) 
den = cv2.pow(blur, 0.5) 

gray = num/den 

cv2.normalize(gray, dst=gray, alpha=0.0, beta=1.0, norm_type=cv2.NORM_MINMAX) 

cv2.imwrite("./debug.png", gray * 255) 

は出力:

enter image description here

+0

私は今、良い結果を得ました、ありがとう! –