흑백 점 (픽셀)이있는 이미지가 있습니다. 흰색 점의 x, y 좌표를 포함하는 모든 다른 흰색 픽셀 집합에 대해 서로 다른 집합을 만들어야합니다. 예를 들어 3 개의 검정 이미지가 흰색 이미지의 연결된 섬이 아닌 경우 좌표가있는 3 개의 집합을 생성해야합니다. 아무도 나를 위해 알고리즘을 제안 할 수 있습니까?검은 색 흰색 이미지의 연결된 영역 (섬)을 찾는 알고리즘
세포 아마도 abs(x1-x2) <=1 && abs(y1-y2)<=1
흑백 점 (픽셀)이있는 이미지가 있습니다. 흰색 점의 x, y 좌표를 포함하는 모든 다른 흰색 픽셀 집합에 대해 서로 다른 집합을 만들어야합니다. 예를 들어 3 개의 검정 이미지가 흰색 이미지의 연결된 섬이 아닌 경우 좌표가있는 3 개의 집합을 생성해야합니다. 아무도 나를 위해 알고리즘을 제안 할 수 있습니까?검은 색 흰색 이미지의 연결된 영역 (섬)을 찾는 알고리즘
세포 아마도 abs(x1-x2) <=1 && abs(y1-y2)<=1
flood filling algorithm 경우 접속된다.
Region growing 트릭을해야합니다. 이 링크는 다른 질문에 답하고 있지만 기본적인 알고리즘은 사용자의 요구에 맞아야합니다. 클러스터의 번호를 알려주는 다른 인수를 전달하면됩니다. 1로 시작하고 새 클러스터를 시작할 때마다이 값을 증가시킵니다.
이 새 인수는 전경으로 1을, 배경으로 2를 대신합니다. 이렇게하면 모든 클러스터의 총 수와 모든 위치가 표시됩니다.
홍수 채우기 알고리즘을 사용합니다. 연결된 지역 수를 찾으려면 import com.sun.corba.se.spi.presentation.rmi.IDLNameTranslator;
import javax.xml.transform.Source;
import java.awt.*;
import java.awt.font.ImageGraphicAttribute;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Collections;
/**
* Created by IntelliJ IDEA.
* User: ruzbeh
* Date: 6/29/12
* Time: 12:58 AM
* To change this template use File | Settings | File Templates.
*/
public class Solution {
static int[][] img;
static void compLabel(int i, int j, int m,int n) {
if(i<0 || j<0 ||i > n-1||j > n-1) return;
if (img[i][j] == 1) {
img[i][j] = m;
compLabel(i - 1, j - 1, m,n);
compLabel(i - 1, j, m,n);
compLabel(i - 1, j + 1, m,n);
compLabel(i, j - 1, m,n);
compLabel(i, j + 1, m,n);
compLabel(i + 1, j - 1, m,n);
compLabel(i + 1, j, m,n);
compLabel(i + 1, j + 1, m,n);
}
}
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int T = Integer.parseInt(br.readLine());
for (int t = 0; t < T; t++) {
int n = Integer.parseInt(br.readLine());
img = new int[n][n];
int label = 2;
for (int i = 0; i < n; i++) {
int j = 0;
for (String str : br.readLine().split(" ")) {
int value = Integer.parseInt(str);
img[i][j] = value;
j++;
}
}
for (int y = 0; y < n; y++)
for (int x = 0; x < n; x++)
if (img[x][y] == 1) {
compLabel(x, y, ++label,n);
}
System.out.println(label - 2);
}
}
}
Connected-component labeling 알고리즘은 분리하고 이미지가 참으로 흑백 인 경우 이러한 클러스터를
열거하도록 구성되며, 한 셀에 대한 더 효율적인 계산 테스트'is_not_connected 될 = A [N, m]^a [n-1, m]; // 지수화가 아니라 XOR을 의미합니다. 이미지 흑백입니까? –
도구로 닫으려는 투표 rec. –