2017-03-13 1 views
0

임계 값은 각 단계에서 픽셀 값이 반올림됨을 의미하는 단계 함수라는 것을 알고 있습니다. 예 : 픽셀 값 33은 32로 반올림됩니다 (32의 임계 값이 있다고 가정). 내 코드에서 나는 thresholding을 수행하려고 노력하고 있지만 나는 그것을 acheieving 생각하지 않습니다. 누군가 내가 놓친 부분에 관해 나를 안내 할 수 있습니까?이미지의 임계 값은 어떻게 만듭니 까?

import pylab as plt 
import matplotlib.image as mpimg 
import numpy as np 

img = np.uint8(mpimg.imread("abby.jpg")) 

img = np.uint8((0.2126* img[:,:,0]) + \ 
np.uint8(0.7152 * img[:,:,1]) +\ 
np.uint8(0.0722 * img[:,:,2])) 

threshold = 128 

for row in img: ## trying to loop through to find if each image pixel > threshold 
    for col in row: 
     if col > threshold: 
     col = threshold 
     else: 
     col = 0 

plt.imshow(img,cmap=plt.cm.gray) 
plt.show() 

답변

0

당신은 이미지 파일 만 로컬 변수 C에 대한 임계 값을 작성하지 않습니다. 숫자가 작은 배열을 읽고 쓰려면 공식 문서 here을 읽어보십시오. 코드 아래

시도 : -

import pylab as plt 
import matplotlib.image as mpimg 
import numpy as np 
from PIL import Image 

img = np.uint8(mpimg.imread("abby.jpg")) 

img = np.uint8((0.2126* img[:,:,0]) + \ 
np.uint8(0.7152 * img[:,:,1]) +\ 
np.uint8(0.0722 * img[:,:,2])) 

threshold = 64 

it = np.nditer(img, flags=['multi_index'], op_flags=['writeonly']) 
while not it.finished: 
    if it[0] > threshold: 
     it[0] = threshold 
    else: 
     it[0] = 0 
    it.iternext() 

im = Image.fromarray(img) 
im.save("output.jpeg") 
plt.imshow(img,cmap=plt.cm.gray) 
plt.show() 

출력 이미지

Output

는 :하기 matplotlib 출력 이미지를 표시하는 방법을 조심하십시오. 밝기 64를 순수한 흰색으로 표시하며 이는 잘못된 표현입니다.

+0

더 간단한 코드를 위해 K.Sarkar와 me 사이의 코멘트 토론을 읽으십시오. 그의 파이썬 전문성 덕분입니다. – saurabheights

1

for 루프를 확인하십시오. for 루프를 사용하여 반복하여 실수를 저지르고있을 수 있습니다.

if col > threshold: 
     col = threshold 

임계 255이어야, 즉 임계 값의 개념이다.

감사

+0

반드시 그렇지는 않습니다. 임계 값 지정은 여러 가지 방법으로 수행 할 수 있으며, 255로 설정하는 것도 한 가지 방법입니다. 또한 임계 값은 지역 변수에 쓰여지고 이미지 메모리에는 쓰이지 않습니다. – saurabheights

+0

그 경우에는 단지 1 라인 코드만으로도 충분합니다 : img [img

+1

예,이 작업은 가능하지만 두 번의 반복이 필요합니다 :'img [ img <임계 값 = 0; img [img> threshold] = 임계 값; 파이썬에서는 그렇게 좋지는 않지만 두 명령의 인덱스 필터링을 병합하면이를 단일 반복으로 변환 할 수 있습니다. – saurabheights

관련 문제