Snažím se používat kernel 3x3 filtr zostřit černé a bílé 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:
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:
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].