Nepravidelné pixelů v nabroušené obrazu při použití 3x3 ostření filtr

0

Otázka

Snažím se používat kernel 3x3 filtr zostřit černé a bílé image: The original image

Broušení jádra = [0 -1 0; -1 5 -1; 0 -1 0]

Snažil jsem se využít CUDA zpracování parallelise proces, ale výsledek filtr produkuje hodně náhlé pixelů s nepravidelným hodnoty:

Erroneous image

Křížová kontrola, jsem šel dopředu a používá ruční serial logic pro výpočet výsledku v Pythonu a mám stejný výsledek. Ale když jsem použil OpenCV je cv2.filter2D funkce, zdá se, že pracovat správně a dává tento výstup:

correct result

Jsem připojený na sériové provedení kód Pythonu.

import cv2 as cv2
import numpy as np
# load the image into system memory
image = cv2.imread('D:/PythonLab/resources/BlackWhite.jpg', flags=cv2.IMREAD_COLOR)

kernel = np.array([[0, -1, 0],
                   [-1, 5,-1],
                   [0, -1, 0]])

image_sharp=np.copy(image)

imrows=image.shape[0]
imcols=image.shape[1]

#pixelindexrow pr, pixelindexcol pc

for pr in range(imrows):
    for pc in range(imcols):
        start_r=pr-1
        start_c=pc-1
        temp=0
        for i in range(3):
            for j in range(3):
                if( start_r+i>=0 and start_r+i<imrows and start_c+j>=0 and start_c+j<imcols):
                    temp=temp+image[start_r+i][start_c+j][0]*kernel[i][j]
                
        image_sharp[pr][pc][0]=temp
        image_sharp[pr][pc][1]=temp
        image_sharp[pr][pc][2]=temp

cv2.imshow('Sharpened', image_sharp)
cv2.imwrite('D:/PythonLab/resources/kernelfilter_MANUAL.jpg', image_sharp)
cv2.waitKey()
cv2.destroyAllWindows()

Může mi někdo říct, kam jdu špatně? Existují nějaké další předzpracování kroky potřebné před použitím ostření filtr? Nejsem si jistý, co dělat z hodnot pixelů, které nejsou vázány v [0,255].

image-processing python
2021-11-23 18:55:30
1

Nejlepší odpověď

0

Pravděpodobně budete chtít upnout své vypočtené hodnoty do 255, tj. nastavit na 255, převyšují-li, že:

outputImage[...] = min(255, temp)

Také, spíše než test 4 podmínky v if prohlášení uvnitř double-vnořené smyčky přes 9 hodnoty uvnitř double-vnořené smyčky více než šířka a výška obrázku... můžete jen spustit svůj smyček z druhého pixelu na předposlední pixel a vyjměte test:

for pr in range(1,imrows-1):
  for pc in range(1,imcols-1):

Také, já jsem si nejste jisti, proč jste četl (a ukládání) obrázku, jak barva - proč ne, jen zatížení s cv2.imread(..., cv2.IMREAD_GRAYSCALE) ?

2021-11-23 22:40:19

Moje špatné. Snažil jsem se, aby Původní pracovat na barevné obrázky. Snažil jsem se s BW. Odchylka v pixelech po konvoluce v rozmezí od (-544,1145). což je docela velkou hodnotu a myslím si, že Upínací hodnoty bude vlastně zaostřit. Obraz stále vypadá offputting. Je tam způsob, jak mohu NORMALIZOVAT hodnoty v [0,255] tak, že obraz vypadá blíže k zaostřený obraz z CV2 filtr
Alex Frost

V jiných jazycích

Tato stránka je v jiných jazycích

Русский
..................................................................................................................
Italiano
..................................................................................................................
Polski
..................................................................................................................
Română
..................................................................................................................
한국어
..................................................................................................................
हिन्दी
..................................................................................................................
Français
..................................................................................................................
Türk
..................................................................................................................
Português
..................................................................................................................
ไทย
..................................................................................................................
中文
..................................................................................................................
Español
..................................................................................................................
Slovenský
..................................................................................................................