행이 가장 큰 어두운 픽셀 수에 해당하는 이미지에 수평선을 그립니다.

타라 바르 가바

검은 색 픽셀이 최대 인 MATLAB에서 이진 이미지에 수평선을 그리고 싶습니다. 예를 들어이 단어에서 :

... 대부분의 픽셀로 수평선을 식별해야합니다.

이진 이미지 변수 편집기를 열고 최대 0이있는 행을 플로팅 할 수 있지만 작동하지 않는 것 같습니다.

이 단어의 기준선을 다음과 같이 만들어야합니다.

... 최대 픽셀이 내가 선을 그린 곳에 있다고 가정하는 출력으로.

레이 룡

순전히 정의에 따라 가장 많은 양의 검은 색 픽셀이있는 행을 파악하려고합니다. 각 행의 모든 ​​열을 합산하고 최대 값을 찾으십시오. 그런 다음 완료되면 개수가 가장 큰 행을 찾아이 선을 빨간색으로 설정합니다.

이와 같은 것이 떠 오릅니다. StackOverflow에서 직접 이미지를 읽고 이미지 처리 도구 상자를 사용하여이 분석을 도와 드리겠습니다.

%// Read image from SO
im = imread('http://s15.postimg.org/cwg2sxnwr/mathworksss.png');

%// Keep a copy of a binary version
im_bw = im2bw(im);

%// Sum over all of the columns and look for dark pixels
row_sums = sum(~im_bw, 2);

%// Find row with max sum
[~,row_max] = max(row_sums);

%// Draw a red line through the original image as it's in RGB
im(row_max,:,1) = 255;
im(row_max,:,2:3) = 0;

%// Show the image
imshow(im);

첫 번째 이미지는 SO에서 직접 이미지를 읽어 MATLAB 작업 공간에 넣습니다. 다음 줄은 이미지를 이진화하여 분석을 더 쉽게합니다. 또한 기준선을 빨간색으로 표시 할 수 있도록 원본 이미지의 사본을 보관합니다. 그 다음 줄 sum은 각 행의 모든 ​​열을 개별적으로 사용 하고 합산하여 검은 색 픽셀을 더합니다. 이는 이진 이미지 반전 하여 어두운 픽셀이 더 밝아 지도록하여 합산을 용이하게합니다. 그런 다음을 사용 max하여 합계가 가장 큰 행을 알아 내고이 작업은의 두 번째 출력을 확인하여 수행됩니다 max. 이 위치를 찾으면이 행을 사용하고이 행의 모든 ​​픽셀을 빨간색 또는 RGB = (255,0,0).

이 이미지를 얻습니다.

여기에 이미지 설명 입력

이제 위의 코드는 왼쪽에서 오른쪽으로 선을 그립니다. 이것을 제한하고 텍스트가있는 곳에 빨간 선만 그리려면 가장 왼쪽과 오른쪽에 가장 어두운 픽셀을 찾아서 약간의 숨을 쉬는 공간을 추가 한 다음 선을 그립니다. 마음에:

%// Read image from SO
im = imread('http://s15.postimg.org/cwg2sxnwr/mathworksss.png');

%// Keep a copy of a binary version
im_bw = im2bw(im);

%// Sum over all of the columns and look for dark pixels
row_sums = sum(~im_bw, 2);

%// Find row with max sum
[~,row_max] = max(row_sums);

%// Find left most and right most black columns
[~,left_most] = find(~im_bw,1,'first');
[~,right_most] = find(~im_bw,1,'last');

%// Buffer for drawing the line before the first and after the last column
buf = 20;

%// Draw the line
im(row_max,left_most-buf:right_most+buf,1) = 255;
im(row_max,left_most-buf:right_most+buf,2:3) = 0;

%// Show the image
imshow(im);

보시다시피, 대부분의 코드는 동일하게 유지 max되지만 ( 이미지 읽기, 임계 값, 열 합산 및 ) 끝으로 갈수록 find열과 관련하여 검정색 픽셀의 첫 번째와 마지막 인스턴스를 찾는 데 사용 합니다. 그런 다음 이전에 찾은 동일한 최대 행으로이 열을 사용하고 가장 왼쪽에있는 검은 색 열 픽셀 위치를 빼고 가장 오른쪽에있는 검은 색 열 픽셀 위치를 버퍼 양만큼 더한 다음 (여기서는 20 개를 선택했습니다)이 안에 픽셀 라인을 설정합니다. 영역을 빨간색으로 변경합니다.

우리는 :

여기에 이미지 설명 입력


이제 두 번째로 높은 합계를 가진 행을 찾고 그 행을 통해 다른 선을 그리는 것이 당신의 소원입니다. 그것은 나쁘지 않습니다. 그러나 각 문자의 바깥 쪽 가장자리가 단일 픽셀 두께가 아니기 때문에 약간의 후 처리가 필요하므로 두 번째로 높은 합계는 실제로 첫 번째 최대 값 근처에있는 행을 제공 할 수 있습니다. 따라서 텍스트를 약간 축소 한 다음 행 합계 논리를 다시 적용하는 것이 좋습니다. 작은 구조 요소를 사용하여 형태 학적 이진 침식 으로 이를 수행 할 수 있습니다 . 예를 들어 3 x 3 정사각형입니다. 이것은 imerode침식에 대해 수행 할 수 있으며 strel사각형 구조 요소를 지정하는 데 사용할 수 있습니다 .

이 새 이미지에 행 합계 논리를 적용한 다음 이러한 결과를 사용하고 원본 이미지에 그립니다. 단일 픽셀 두께의 텍스트 영역이 일부 있고 침식 후 제거되는 것처럼 보이기 때문에이 새 이미지에 대해 작업하고 싶지 않습니다.

다음과 같은 것이 떠 오릅니다.

%// Read image from SO
im = imread('http://s15.postimg.org/cwg2sxnwr/mathworksss.png');

%// Keep a copy of a binary version - also invert for ease
im_bw = ~im2bw(im);

%// Slightly erode the text
im_bw = imerode(im_bw, strel('square', 3));

%// Sum over all of the columns and look for dark pixels
row_sums = sum(im_bw, 2);

%// Sort the column sums in descending order and figure out the two highest sums
[~,ind_sort] = sort(row_sums,'descend');

%// First highest sum is the bottom - mark as red
red_row1 = ind_sort(1);

%// Second highest sum is the middle - mark as red too
red_row2 = ind_sort(2);

%// Find left most and right most black columns
[~,left_most] = find(im_bw,1,'first');
[~,right_most] = find(im_bw,1,'last');

%// Buffer for drawing the line before the first and after the last column
buf = 20;

%// Draw the two red lines
im(red_row1,left_most-buf:right_most+buf,1) = 255;
im(red_row1,left_most-buf:right_most+buf,2:3) = 0;

im(red_row2,left_most-buf:right_most+buf,1) = 255;
im(red_row2,left_most-buf:right_most+buf,2:3) = 0;

%// Show the image
imshow(im);

보시다시피 대부분의 논리는 동일합니다. 내가 정말로 변경 한 유일한 것은 이미지를 침식하고 행 합계를 내림차순으로 정렬하고 가장 높은 처음 두 위치를 추출한 것입니다. 그런 다음 논리를 반복하여 행을 통해 선을 그렸지만 이제 한 행 대신 두 개가 있습니다.


우리는 :

여기에 이미지 설명 입력

이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.

침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

분류에서Dev

MATLAB에서 "매우 큰 이미지 파일"을 처리하고 값이 가장 큰 픽셀을 찾는 방법

분류에서Dev

Opencv C ++. for 루프에서 이미지의 다른 픽셀에 원을 그립니다 (이미지는 각 루프 실행에서 새로 열어야 함).

분류에서Dev

mogrify를 사용하여 가장 큰 치수의 특정 픽셀 값을 대상으로 지정하려면 어떻게해야합니까? 수직이면 높이를 'x'로 설정하고 수평이면 너비를 'x'로 설정합니다.

분류에서Dev

작은 이미지에서는 픽셀 값을 읽을 수 없지만 큰 이미지에서는 읽을 수 있습니다.

분류에서Dev

Python / opencv : 이미지의 픽셀을 가장 가까운 4 픽셀의 평균으로 만듭니다.

분류에서Dev

동일한 크기의 이미지를 픽셀 단위로 비교하여 모든 픽셀에 대해 가장 일반적인 색상을 찾습니다.

분류에서Dev

파이썬의 일부 좌표 (목록에 저장 됨)의 이진 이미지에 흰색 픽셀이 있는지 어떻게 알 수 있습니까?

분류에서Dev

이미지의 픽셀에서 RGBA 값을 가져 오는 그래픽 방법이 있습니까?

분류에서Dev

OpenCV에서 읽을 수있는 가장 큰 이미지는 무엇입니까?

분류에서Dev

이미지의 흰색 픽셀을 가로 지르고 두 픽셀마다 노드를 추가하고 가장자리를 사용하여 해당 노드를 연결하는 방법

분류에서Dev

OpenCV의 각 픽셀에 액세스하고 작업을 수행하고 새 정보를 이미지에 반환하려면 어떻게해야합니까?

분류에서Dev

PixelGrabber (JAVA)를 사용하여 총 픽셀 수를 계산하고 두 이미지 간의 다른 픽셀을 비교하려면 어떻게해야합니까?

분류에서Dev

투명 이미지에 대해 픽셀 당 충돌 테스트를 수행하는 방법은 무엇입니까?

분류에서Dev

픽셀 좌표의 두 점 세트에 수직선을 그립니다.

분류에서Dev

클립으로 이미지 하단에서 X 픽셀을 자릅니다.

분류에서Dev

python과 opencv를 사용하여 100 픽셀의 윤곽 거리가 주어진 이미지에 두 개의 윤곽선을 어떻게 그릴 수 있습니까?

분류에서Dev

jpeg의 어두운 픽셀 수를 찾는 "가장 쉬운"방법은 무엇입니까?

분류에서Dev

검은 색 픽셀을 제외한 RGB 이미지 집합에서 가장 빈번한 픽셀 값을 찾는 방법은 무엇입니까?

분류에서Dev

SQL에서 가장 큰 날이있는 행을 어떻게 선택합니까?

분류에서Dev

픽셀 아트 이미지를 선명하게 만들기 위해 SceneKit에서 앤티 앨리어싱을 끌 수 있습니까?

분류에서Dev

이진 이미지의 레이블이있는 영역에서 두 픽셀 사이의 가장 높은 거리를 계산합니다.

분류에서Dev

이미지를 다운로드하고 저장에 저장하지만 이미지 갤러리에서 해당 이미지를 볼 수 없습니다.

분류에서Dev

이 주파수 선을 어느 픽셀에 그려야합니까?

분류에서Dev

JPEG 이미지는 여러 장치에서 서로 다른 픽셀 값을 갖습니다.

분류에서Dev

더 많은 픽셀 PNG 이미지는 더 작은 픽셀 이미지보다 크기가 더 작을 수 있습니까?

분류에서Dev

이미지의 모든 픽셀에 대해 가장 가까운 RGB 색상 찾기

분류에서Dev

이미지의 현재 마우스 위치에 대한 픽셀 좌표와 픽셀 값을 표시 할 수있는 우분투의 이미지 뷰어

분류에서Dev

이미지의 현재 마우스 위치에 대한 픽셀 좌표와 픽셀 값을 표시 할 수있는 우분투의 이미지 뷰어

분류에서Dev

이미지의 현재 마우스 위치에 대한 픽셀 좌표와 픽셀 값을 표시 할 수있는 우분투의 이미지 뷰어

Related 관련 기사

  1. 1

    MATLAB에서 "매우 큰 이미지 파일"을 처리하고 값이 가장 큰 픽셀을 찾는 방법

  2. 2

    Opencv C ++. for 루프에서 이미지의 다른 픽셀에 원을 그립니다 (이미지는 각 루프 실행에서 새로 열어야 함).

  3. 3

    mogrify를 사용하여 가장 큰 치수의 특정 픽셀 값을 대상으로 지정하려면 어떻게해야합니까? 수직이면 높이를 'x'로 설정하고 수평이면 너비를 'x'로 설정합니다.

  4. 4

    작은 이미지에서는 픽셀 값을 읽을 수 없지만 큰 이미지에서는 읽을 수 있습니다.

  5. 5

    Python / opencv : 이미지의 픽셀을 가장 가까운 4 픽셀의 평균으로 만듭니다.

  6. 6

    동일한 크기의 이미지를 픽셀 단위로 비교하여 모든 픽셀에 대해 가장 일반적인 색상을 찾습니다.

  7. 7

    파이썬의 일부 좌표 (목록에 저장 됨)의 이진 이미지에 흰색 픽셀이 있는지 어떻게 알 수 있습니까?

  8. 8

    이미지의 픽셀에서 RGBA 값을 가져 오는 그래픽 방법이 있습니까?

  9. 9

    OpenCV에서 읽을 수있는 가장 큰 이미지는 무엇입니까?

  10. 10

    이미지의 흰색 픽셀을 가로 지르고 두 픽셀마다 노드를 추가하고 가장자리를 사용하여 해당 노드를 연결하는 방법

  11. 11

    OpenCV의 각 픽셀에 액세스하고 작업을 수행하고 새 정보를 이미지에 반환하려면 어떻게해야합니까?

  12. 12

    PixelGrabber (JAVA)를 사용하여 총 픽셀 수를 계산하고 두 이미지 간의 다른 픽셀을 비교하려면 어떻게해야합니까?

  13. 13

    투명 이미지에 대해 픽셀 당 충돌 테스트를 수행하는 방법은 무엇입니까?

  14. 14

    픽셀 좌표의 두 점 세트에 수직선을 그립니다.

  15. 15

    클립으로 이미지 하단에서 X 픽셀을 자릅니다.

  16. 16

    python과 opencv를 사용하여 100 픽셀의 윤곽 거리가 주어진 이미지에 두 개의 윤곽선을 어떻게 그릴 수 있습니까?

  17. 17

    jpeg의 어두운 픽셀 수를 찾는 "가장 쉬운"방법은 무엇입니까?

  18. 18

    검은 색 픽셀을 제외한 RGB 이미지 집합에서 가장 빈번한 픽셀 값을 찾는 방법은 무엇입니까?

  19. 19

    SQL에서 가장 큰 날이있는 행을 어떻게 선택합니까?

  20. 20

    픽셀 아트 이미지를 선명하게 만들기 위해 SceneKit에서 앤티 앨리어싱을 끌 수 있습니까?

  21. 21

    이진 이미지의 레이블이있는 영역에서 두 픽셀 사이의 가장 높은 거리를 계산합니다.

  22. 22

    이미지를 다운로드하고 저장에 저장하지만 이미지 갤러리에서 해당 이미지를 볼 수 없습니다.

  23. 23

    이 주파수 선을 어느 픽셀에 그려야합니까?

  24. 24

    JPEG 이미지는 여러 장치에서 서로 다른 픽셀 값을 갖습니다.

  25. 25

    더 많은 픽셀 PNG 이미지는 더 작은 픽셀 이미지보다 크기가 더 작을 수 있습니까?

  26. 26

    이미지의 모든 픽셀에 대해 가장 가까운 RGB 색상 찾기

  27. 27

    이미지의 현재 마우스 위치에 대한 픽셀 좌표와 픽셀 값을 표시 할 수있는 우분투의 이미지 뷰어

  28. 28

    이미지의 현재 마우스 위치에 대한 픽셀 좌표와 픽셀 값을 표시 할 수있는 우분투의 이미지 뷰어

  29. 29

    이미지의 현재 마우스 위치에 대한 픽셀 좌표와 픽셀 값을 표시 할 수있는 우분투의 이미지 뷰어

뜨겁다태그

보관