이미지가 제곱되는지 (픽셀 화되었는지) 확인하려고합니다.파이썬에서 픽셀 화 된 이미지 감지하기
나는 numpy 또는 scipy로 2D 4 중 변환을 들어 보았지만 조금 복잡합니다.
목표 인해이 (IMG가)와 같은 나쁜 압축 제곱 영역의 양을 결정하는 것입니다 :
이미지가 제곱되는지 (픽셀 화되었는지) 확인하려고합니다.파이썬에서 픽셀 화 된 이미지 감지하기
나는 numpy 또는 scipy로 2D 4 중 변환을 들어 보았지만 조금 복잡합니다.
목표 인해이 (IMG가)와 같은 나쁜 압축 제곱 영역의 양을 결정하는 것입니다 :
나는이 일을한다면 아무 생각이 없다 -하지만, 당신이 시도 수있는 일이다 픽셀 주위에서 가장 가까운 이웃을 얻는다. 픽셀 화 된 사각형은 한 지역의 RGB 값에서 눈에 띄는 점프가됩니다.
당신은
def get_neighbors(x,y, img):
ops = [-1, 0, +1]
pixels = []
for opy in ops:
for opx in ops:
try:
pixels.append(img[x+opx][y+opy])
except:
pass
return pixels
이 소스 이미지의 영역에서 당신에게 가장 가까운 픽셀을 줄 것 같은 것을 사용하여 이미지의 모든 픽셀의 가장 가까운 이웃을 찾을 수 있습니다.
를 사용하려면, 당신은 더하지만 생각, 사용 OpenCV의 후
def detect_pixellated(fp):
img = misc.imread(fp)
width, height = np.shape(img)[0:2]
# Pixel change to detect edge
threshold = 20
for x in range(width):
for y in range(height):
neighbors = get_neighbors(x, y, img)
# Neighbors come in this order:
# 6 7 8
# 3 4 5
# 0 1 2
center = neighbor[4]
del neighbor[4]
for neighbor in neighbors:
diffs = map(operator.abs, map(operator.sub, neighbor, center))
possibleEdge = all(diff > threshold for diff in diffs)
처럼 뭔가를하고 에지 검출을하고 윤곽의 크기를 얻을 것입니다. 그렇게하면 훨씬 쉽고 강력해질 것입니다.
마지막 단락 "... OpenCV를 사용하고 가장자리 감지를 수행하고 등고선 크기를 얻으십시오 ..."많이 도움이되었습니다! 감사 – Hamed
2 차원 이미지 그래프 대신 선형 그래프를 다루기 때문에 abit가 더 쉽습니다.이 그래프는 항상 더 간단합니다.
해결책 :
:의 블록 성을 결정하기 위해, 각 화소를 가로 질러 라인 스캔이 계산에 액세스 빠른 경우 배열에 줄을 추가 한 다음 라인 (들)에 대한 알고리즘을 실행할
1/라인의 모든 픽셀을 통과하여 두 픽셀 사이의 값을 빼서 이전 픽셀과 비교합니다. 이전 픽셀 값의 배열을 만듭니다. 픽셀 값의 큰 점프가 규칙적인 반전에서 발생하면 막히게됩니다. 값의 작은 점프와 결합 된 값의 큰 점프가있는 경우 블록이 뭉툭합니다 ... 균등 한 픽셀 차이가 많은 경우 블록이 흐릿합니다. 특히 2 및 4 인접 픽셀 간격으로 두 번 분석을 반복하면 여러 줄에.
픽셀 사이의 픽셀 차이 그래프를 3-5-10 픽셀 간격으로 만들면 샘플링 된 선의 그라디언트 변경에 대한 추가 정보를 얻을 수 있습니다. 이웃 픽셀과 다섯 번째 이웃 픽셀의 픽셀 차이의 비율이 비슷한 경우, 그것은 또한 매끄러운 색상을 나타냅니다.
2 차원 이미지보다 더 단순한 오디오에서와 같이 선형 그래프에서 빠른 4 차원을 포함하여 많은 알 고리즘이있을 수 있습니다.
이것은 내 머리 꼭대기에있는 것이므로 단지 댓글 일뿐입니다. 압축되지 않은 원본 이미지에 액세스 할 수 있습니까? 그렇다면 2 개의 이미지의 색상 수를 시도해보십시오. 하나가 다른 하나보다 상당히 낮 으면 거의 확실하게 픽셀 화/포스터 라이 제이션이 발생합니다. –
슬프게도 원래 이미지에 액세스 할 수 없습니다. – kollo