1
0
mirror of https://github.com/ciromattia/kcc synced 2025-12-13 01:36:27 +00:00

fix color detection false positives (#1088)

This commit is contained in:
Alex Xu
2025-09-21 09:12:41 -07:00
committed by GitHub
parent a031e4622e
commit e92b5c74de

View File

@@ -290,16 +290,56 @@ class ComicPage:
cb_hist = cb.histogram() cb_hist = cb.histogram()
cr_hist = cr.histogram() cr_hist = cr.histogram()
for h in cb_hist, cr_hist:
# cut off pixels from both ends of the histogram
cutoff = (.1, .1)
# get number of pixels
n = sum(h)
# remove cutoff% pixels from the low end
cut = int(n * cutoff[0] // 100)
for lo in range(256):
if cut > h[lo]:
cut = cut - h[lo]
h[lo] = 0
else:
h[lo] -= cut
cut = 0
if cut <= 0:
break
# remove cutoff% samples from the high end
cut = int(n * cutoff[1] // 100)
for hi in range(255, -1, -1):
if cut > h[hi]:
cut = cut - h[hi]
h[hi] = 0
else:
h[hi] -= cut
cut = 0
if cut <= 0:
break
cb_nonzero = [i for i, e in enumerate(cb_hist) if e] cb_nonzero = [i for i, e in enumerate(cb_hist) if e]
cr_nonzero = [i for i, e in enumerate(cr_hist) if e] cr_nonzero = [i for i, e in enumerate(cr_hist) if e]
cb_spread = cb_nonzero[-1] - cb_nonzero[0] if len(cb_nonzero) else 0 cb_spread = cb_nonzero[-1] - cb_nonzero[0]
cr_spread = cr_nonzero[-1] - cr_nonzero[0] if len(cr_nonzero) else 0 cr_spread = cr_nonzero[-1] - cr_nonzero[0]
SPREAD_THRESHOLD=20 # bias adjustment
SPREAD_THRESHOLD = 5
if cb_spread < SPREAD_THRESHOLD and cr_spread < SPREAD_THRESHOLD: if cb_spread < SPREAD_THRESHOLD and cr_spread < SPREAD_THRESHOLD:
return False return False
else:
DIFF_THRESHOLD = 10
if cb_nonzero[0] < 128 - DIFF_THRESHOLD:
return True return True
elif cb_nonzero[-1] > 128 + DIFF_THRESHOLD:
return True
elif cr_nonzero[0] < 128 - DIFF_THRESHOLD:
return True
elif cr_nonzero[-1] > 128 + DIFF_THRESHOLD:
return True
else:
return False
def saveToDir(self): def saveToDir(self):
try: try: