2017-12-12 3 views
-4

스테 가노 그래피를 사용하여 이미지를 가지고 있는데 테두리 픽셀에만 데이터를 저장하려고합니다.파이썬에서 이미지의 테두리 픽셀을 얻는 방법은 무엇입니까?

즉, 이미지 테두리 픽셀의 최하위 비트 (LSB)로만 데이터를 저장하려고합니다.

경계 픽셀에 데이터를 저장할 수있는 방법이 있습니까 (최대 15 자 텍스트)? Plz은, 테두리 픽셀을 취득 ...

+0

이것은 도움이 될 수 있습니다 - https://github.com/RobinDavid/LSB-Steganography – GaneshTata

+2

테두리 픽셀 ... 이미지 배열의 첫 번째 및 마지막 행/열과 마찬가지로? 그것에 대해 무엇을 찾으십니까? – Reti43

+0

나는 numpy 슬라이스로 생각하면 초 만에 얻을 수있다 .... – api55

답변

0

나 좀 도와 :

마스킹 작업은 이미지의 가장자리 픽셀을 얻을 수있는 많은 방법 중 하나입니다. I는 입력 화상과 동일한 치수를 갖는 것들의 배열을 얻을 후

a= cv2.imread('cal1.jpg') 
bw = 20 //width of border required 
mask = np.ones(a.shape[:2], dtype = "uint8") 
cv2.rectangle(mask, (bw,bw),(a.shape[1]-bw,a.shape[0]-bw), 0, -1) 
output = cv2.bitwise_and(a, a, mask = mask) 
cv2.imshow('out', output) 
cv2.waitKey(5000) 

는 I가 0들의 사각형을 그리 cv2.rectangle 함수를 사용하여 다음과 같은 코드가 될 것이다. 첫 번째 인수는 그리려는 이미지이고 두 번째 인수는 start (x, y) 점이고 세 ​​번째 인수는 끝 (x, y) 점입니다. 네 번째 인수는 색상이고 '-1'은 그려지는 사각형의 두께를 나타냅니다 (-1은 사각형을 채 웁니다). 함수 here에 대한 설명서를 찾을 수 있습니다.

이제 마스크가 생겼으므로 'cv2.bitwise_and'(문서) 함수를 사용하여 픽셀에 대해 AND 연산을 수행 할 수 있습니다. 기본적으로 마스크의 '1'픽셀과 AND 인 픽셀은 픽셀 값을 유지합니다. 마스크의 '0'픽셀과 AND 인 픽셀은 0이됩니다. 그러면 다음과 같이 출력됩니다.

here.

입력 이미지였다

enter image description here

이제 경계 픽셀을 가지고!

LSB 평면을 사용하여 정보를 저장하는 것은 좋은 생각이 아닙니다. 그것에 대해 생각할 때 그것은 의미가 있습니다. 단순한 손실 압축은 대부분의 숨겨진 데이터에 영향을 미칩니다. JPEG로 이미지를 저장하면 정보가 손실되거나 심각한 영향을받는 정보가됩니다. LSB를 계속 시도하려면 비트 플레인 슬라이싱을 조사하십시오. 비트 평면 슬라이싱을 통해 기본적으로 이미지의 비트 평면 (MSB에서 LSB까지)을 얻습니다. enter image description here (image from researchgate.net)

저는 Matlab에서이 작업을 수행했으며 파이썬으로 작업하고 있습니다. Matlab에서 함수 'bitget (image, 1)'은 이미지의 LSB를 반환합니다. 파이썬 here을 사용하여 비트 평면 조각화에 관한 질문을 찾았습니다. 답이 없지만 게시 된 코드를 조사하고 싶을 수 있습니다.

관련 문제