'잡동사니'에 해당되는 글 13451건

  1. 2025.05.08 아이나비 dmb 안테나
  2. 2025.05.07 kinect 1.x, 2.x color <-> depth mapping
  3. 2025.05.07 numa 와 smp
  4. 2025.05.06 가족 추가요~
  5. 2025.05.06 kinect v2 잘못된 깊이 맵 맵핑
  6. 2025.05.05 libfreenect2 rgb / depth 매핑 소스코드 분석
  7. 2025.05.04 피곤
  8. 2025.05.02 여유
  9. 2025.05.01 kinect rgb - depth mapping
  10. 2025.04.30 잘가 ace combat 7

일단은 나쁘지 않게 사용중. 그런데 실내 + 짧아서 그런지 모르겠지만

혹은 새로 바꾸고 더 신경써서 그런진 모르겠지만 묘하게 수신 안되는 곳이 꽤 많아 보인다.

ytn 채널인지 먼진 모르겠지만 dmb 수신이 되는데 tpeg은 신호 없음이 뜨다니 멀까..

[링크 : http://itempage3.auction.co.kr/DetailView.aspx?itemno=D721489963]

[링크 : https://m.11st.co.kr/products/ma/33687866?prdNo=33687866]

 

이건 아이나비 커넥터 쪽

 

왼쪽은 그냥 굴러 다니던 안테나 커넥터 인데 아쉽게도.. 맞지 않는다.

오른쪽이 아이나비 dmb 안테나. 먼가 딱 봐도 좀 비싸 보이네

 

히로세 533 규격 이라고 한다.

근데 검색해도 드럽게 안나오네

[링크 : https://blog.naver.com/pkw00/221497143443]

 

kms 533 으로 검색하면 나오는 녀석들.. 이거 맞...나?

그 와중에 male은 찾는데 실패

[링크 : https://entertec.cafe24.com/product/kms-533-s/2987/]

 

[링크 : https://kjtelecom.co.kr/mall2/shop/prod_view.jsp?cc=5121]

'개소리 왈왈 > 육아관련 주저리' 카테고리의 다른 글

개 목욕  (0) 2025.05.10
폭주  (2) 2025.05.08
가족 추가요~  (0) 2025.05.06
피곤  (0) 2025.05.04
여유  (0) 2025.05.02
Posted by 구차니

링크와는 다르게 내용상으로는 preview 시절(?) api 같은데

colorframe -> depth

public void MapColorFrameToDepthSpace (
         Array<UInt16>[] depthFrameData,
         out Array<DepthSpacePoint>[] depthSpacePoints
)

[링크 : https://learn.microsoft.com/en-us/previous-versions/windows/kinect/dn791296(v=ieb.10)?redirectedfrom=MSDN]

 

depth -> colorframe 가 존재한다.

public void MapDepthFrameToCameraSpace (
         Array<UInt16>[] depthFrameData,
         out Array<CameraSpacePoint>[] cameraSpacePoints
)

[링크 : https://learn.microsoft.com/en-us/previous-versions/windows/kinect/dn791303(v=ieb.10)?redirectedfrom=MSDN]

    [링크 : https://learn.microsoft.com/en-us/previous-versions/windows/kinect/dn758445(v=ieb.10)?redirectedfrom=MSDN]

 

v1.8에도 존재 (링크 사라짐)

[링크 : https://learn.microsoft.com/en-us/previous-versions/windows/kinect-1.8/jj663707(v=ieb.10)]

   [링크 : https://stackoverflow.com/questions/17012585/how-do-you-map-kinects-depth-data-to-its-rgb-color]

 

그래서 함수 명으로 검색했는데 좀 이름이 다르다.

HRESULT MapDepthFrameToColorFrame(
         NUI_IMAGE_RESOLUTION eDepthResolution,
         DWORD cDepthPixels,
         NUI_DEPTH_IMAGE_PIXEL *pDepthPixels,
         NUI_IMAGE_TYPE eColorType,
         NUI_IMAGE_RESOLUTION eColorResolution,
         DWORD cColorPoints,
         NUI_COLOR_IMAGE_POINT *pColorPoints
)

[링크 : https://learn.microsoft.com/en-us/previous-versions/windows/kinect-1.8/jj883691(v=ieb.10)]

 

HRESULT MapColorFrameToDepthFrame(
         NUI_IMAGE_TYPE eColorType,
         NUI_IMAGE_RESOLUTION eColorResolution,
         NUI_IMAGE_RESOLUTION eDepthResolution,
         DWORD cDepthPixels,
         NUI_DEPTH_IMAGE_PIXEL *pDepthPixels,
         DWORD cDepthPoints,
         NUI_DEPTH_IMAGE_POINT *pDepthPoints
)

[링크 : https://learn.microsoft.com/en-us/previous-versions/windows/kinect-1.8/jj883688(v=ieb.10)]

'프로그램 사용 > kinect' 카테고리의 다른 글

libfreenect2 VAAPI 버그?  (2) 2025.05.22
kinect v2 잘못된 깊이 맵 맵핑  (0) 2025.05.06
libfreenect2 rgb / depth 매핑 소스코드 분석  (0) 2025.05.05
kinect rgb - depth mapping  (0) 2025.05.01
kinect 깊이 정밀도  (0) 2025.04.15
Posted by 구차니

문득 numa 라는게 보여서 먼가 해서 찾아보는데

smp는 north bridge가 있던 시절이고(!)

north bridge의 memory controller가 cpu의 요청에 따라 큐잉되어 메모리를 읽어서 보내주고

메모리에 cpu들이 많이 요청하면 응답대기가 길어지는 문제가 발생

 

그래서 NUMA 에서는 cpu 별로 메모리를 장착하고

local memory라고 이름짓고는 자기에게 할당된 메모리에서는 쌩쌩하게

그게 아니면 cpu 간의 inter-connect를 이용하여 다른 cpu의 메모리를 접근해서 대용량 메모리를 쓰는 구조

[링크 : https://jeongzero.oopy.io/94ef3e61-c27c-4fba-b8b9-2b9b8aac933a]

[링크 : https://brunch.co.kr/@dreaminz/4]

 

아.. 그래서 요즘 서버가 cpu 별로 메모리가 구성되어야 해서 특정 슬롯에 꽂아 해당 cpu에 local memory로 구성되게 되는거였군..

[링크 : https://www.dell.com/support/manuals/ko-kr/poweredge-r740/per740_ism_pub/system-memory-guidelines?guid=guid-35e102bf-db9e-4652-a16b-2b37f8fce553&lang=en-us]

 

반대로 그러면.. cpu 에서 스케쥴링 할때 cpu 에 round robin등으로 임의 할당하면 안되고

어느정도는 벗어날수 없는(?) 경계가 존재하는 affinity 제한적 스케쥴링을 해야 하는건가?

 

 

 

'이론 관련 > 컴퓨터 관련' 카테고리의 다른 글

bit banging  (0) 2025.05.08
USB BOS - Binary Object Store  (0) 2024.07.14
DDR3 pinout과 ECC  (0) 2024.04.01
uefi dxe pei  (0) 2024.04.01
radix 4 - fp4  (0) 2024.03.21
Posted by 구차니

6개월 만에 다시 똥 치우는 신세로 전락할 느낌.. 후..

 

코코(1살, 성별 모름, 코뉴어)

 

걍 꼬꼬 하자니까.. -_-

'개소리 왈왈 > 육아관련 주저리' 카테고리의 다른 글

폭주  (2) 2025.05.08
아이나비 dmb 안테나  (0) 2025.05.08
피곤  (0) 2025.05.04
여유  (0) 2025.05.02
참관수업 그리고 데이트  (2) 2025.04.23
Posted by 구차니

심심해서(?) 실행해봤는데 어라...

아무래도 depth 카메라와 rgb 카메라의 거리가 떨어져있어서 시차로 인한 오류가 발생을 하는지

특수한 각도에서는 다음과 같이 이상하게 맵핑이 된다.

(노트북 뒤로 몽둥이를 들고 있는데 3d로 합성된 쪽에서는 투명하게 뚫는 것 처럼 보임)

libfreenect2의 한계인가.. 아니면 윈도우 버전도 이럴려나?

'프로그램 사용 > kinect' 카테고리의 다른 글

libfreenect2 VAAPI 버그?  (2) 2025.05.22
kinect 1.x, 2.x color <-> depth mapping  (0) 2025.05.07
libfreenect2 rgb / depth 매핑 소스코드 분석  (0) 2025.05.05
kinect rgb - depth mapping  (0) 2025.05.01
kinect 깊이 정밀도  (0) 2025.04.15
Posted by 구차니

libfreenect2 내의 매핑 코드가 이해가 안되서 다른걸 찾아보는데 여전히 이해가 안된다..

코드 상으로는 크게 차이가 없는 것 같지만, color map에 depth map을 합성하는게 더 자연스러워 보이는 것 같다.

The following snippet shows us how to locate the color bytes from the ColorSpacePoint:

// we need a starting point, let's pick 0 for now
int index = 0;
 
ushort depth = _depthData[index];
ColorSpacePoint point = _colorSpacePoints[index];
 
// round down to the nearest pixel
int colorX = (int)Math.Floor(point.X + 0.5);
int colorY = (int)Math.Floor(point.Y + 0.5);
 
// make sure the pixel is part of the image
if ((colorX >= 0 && (colorX < colorWidth) && (colorY >= 0) && (colorY < colorHeight))
{
 
    int colorImageIndex = ((colorWidth * colorY) + colorX) * bytesPerPixel;
 
    byte b = _colorFrameData[colorImageIndex];
    byte g = _colorFrameData[colorImageIndex + 1];
    byte r = _colorFrameData[colorImageIndex + 2];
    byte a = _colorFrameData[colorImageIndex + 3];
 
}

 

그나저나 depth sensor가 더 FOV가 넓어서 왜곡되다보니

depth map에 맵핑했을 경우에는 lens 왜곡 보정을 한 것 같기도 한데

코드 상에는 별 내용이 없는 것 같기도 하고.. 멀 한거지?

// clear the pixels before we color them
Array.Clear(_pixels, 0, _pixels.Length);
 
for (int depthIndex = 0; depthIndex < _depthData.Length; ++depthIndex)
{
    ColorSpacePoint point = _colorSpacePoints[depthIndex];
 
    int colorX = (int)Math.Floor(point.X + 0.5);
    int colorY = (int)Math.Floor(point.Y + 0.5);
    if ((colorX >= 0) && (colorX < colorWidth) && (colorY >= 0) && (colorY < colorHeight))
    {
        int colorImageIndex = ((colorWidth * colorY) + colorX) * bytesPerPixel;
        int depthPixel = depthIndex * bytesPerPixel;
 
        _pixels[depthPixel] = _colorData[colorImageIndex];
        _pixels[depthPixel + 1] = _colorData[colorImageIndex + 1];
        _pixels[depthPixel + 2] = _colorData[colorImageIndex + 2];
        _pixels[depthPixel + 3] = 255;
    }
}

[링크 : https://www.bryancook.net/2014/03/mapping-between-kinect-color-and-depth.html]

    [링크 : https://stackoverflow.com/questions/29479746/kinect-v2-color-depth-mapping-using-c-sharp]

[링크 : https://kr.mathworks.com/matlabcentral/answers/268152-mapping-rgb-and-depth-kinect-v2]

[링크 : https://learn.microsoft.com/en-us/previous-versions/windows/kinect/dn758445(v=ieb.10)?redirectedfrom=MSDN]

    [링크 : https://tommyhsm.tistory.com/124]

 

libfreenct의 Protonect 실행하는 부분에서, rgb와 depth를 어떻게 매핑하는지 궁금해서 찾아보는데 크게 자료가 있진 않다.

/// [registration setup]
  libfreenect2::Registration* registration = new libfreenect2::Registration(dev->getIrCameraParams(), dev->getColorCameraParams());
  libfreenect2::Frame undistorted(512, 424, 4), registered(512, 424, 4);

/// [loop start]
  while(!protonect_shutdown && (framemax == (size_t)-1 || framecount < framemax))
  {
    if (!listener.waitForNewFrame(frames, 10*1000)) // 10 sconds
    {
      std::cout << "timeout!" << std::endl;
      return -1;
    }
    libfreenect2::Frame *rgb = frames[libfreenect2::Frame::Color];
    libfreenect2::Frame *ir = frames[libfreenect2::Frame::Ir];
    libfreenect2::Frame *depth = frames[libfreenect2::Frame::Depth];
/// [loop start]

    if (enable_rgb && enable_depth)
    {
/// [registration]
      registration->apply(rgb, depth, &undistorted, &registered);
/// [registration]
    }

    framecount++;
    if (!viewer_enabled)
    {
      if (framecount % 100 == 0)
        std::cout << "The viewer is turned off. Received " << framecount << " frames. Ctrl-C to stop." << std::endl;
      listener.release(frames);
      continue;
    }

#ifdef EXAMPLES_WITH_OPENGL_SUPPORT
    if (enable_rgb)
    {
      viewer.addFrame("RGB", rgb);
    }
    if (enable_depth)
    {
      viewer.addFrame("ir", ir);
      viewer.addFrame("depth", depth);
    }
    if (enable_rgb && enable_depth)
    {
      viewer.addFrame("registered", &registered);
    }

    protonect_shutdown = protonect_shutdown || viewer.render();
#endif

/// [loop end]
    listener.release(frames);
    /** libfreenect2::this_thread::sleep_for(libfreenect2::chrono::milliseconds(100)); */
  }
/// [loop end]

[링크 : https://github.com/OpenKinect/libfreenect2/blob/fd64c5d9b214df6f6a55b4419357e51083f15d93/examples/Protonect.cpp#L348]

void Registration::apply(const Frame *rgb, const Frame *depth, Frame *undistorted, Frame *registered, const bool enable_filter, Frame *bigdepth, int *color_depth_map) const
{
  impl_->apply(rgb, depth, undistorted, registered, enable_filter, bigdepth, color_depth_map);
}

void RegistrationImpl::apply(const Frame *rgb, const Frame *depth, Frame *undistorted, Frame *registered, const bool enable_filter, Frame *bigdepth, int *color_depth_map) const
{
  // Check if all frames are valid and have the correct size
  if (!rgb || !depth || !undistorted || !registered ||
      rgb->width != 1920 || rgb->height != 1080 || rgb->bytes_per_pixel != 4 ||
      depth->width != 512 || depth->height != 424 || depth->bytes_per_pixel != 4 ||
      undistorted->width != 512 || undistorted->height != 424 || undistorted->bytes_per_pixel != 4 ||
      registered->width != 512 || registered->height != 424 || registered->bytes_per_pixel != 4)
    return;

  const float *depth_data = (float*)depth->data;
  const unsigned int *rgb_data = (unsigned int*)rgb->data;
  float *undistorted_data = (float*)undistorted->data;
  unsigned int *registered_data = (unsigned int*)registered->data;
  const int *map_dist = distort_map;
  const float *map_x = depth_to_color_map_x;
  const int *map_yi = depth_to_color_map_yi;

  const int size_depth = 512 * 424;
  const int size_color = 1920 * 1080;
  const float color_cx = color.cx + 0.5f; // 0.5f added for later rounding

  // size of filter map with a border of filter_height_half on top and bottom so that no check for borders is needed.
  // since the color image is wide angle no border to the sides is needed.
  const int size_filter_map = size_color + 1920 * filter_height_half * 2;
  // offset to the important data
  const int offset_filter_map = 1920 * filter_height_half;

  // map for storing the min z values used for each color pixel
  float *filter_map = NULL;
  // pointer to the beginning of the important data
  float *p_filter_map = NULL;

  // map for storing the color offset for each depth pixel
  int *depth_to_c_off = color_depth_map ? color_depth_map : new int[size_depth];
  int *map_c_off = depth_to_c_off;

  // initializing the depth_map with values outside of the Kinect2 range
  if(enable_filter){
    filter_map = bigdepth ? (float*)bigdepth->data : new float[size_filter_map];
    p_filter_map = filter_map + offset_filter_map;

    for(float *it = filter_map, *end = filter_map + size_filter_map; it != end; ++it){
      *it = std::numeric_limits<float>::infinity();
    }
  }

  /* Fix depth distortion, and compute pixel to use from 'rgb' based on depth measurement,
   * stored as x/y offset in the rgb data.
   */

  // iterating over all pixels from undistorted depth and registered color image
  // the four maps have the same structure as the images, so their pointers are increased each iteration as well
  for(int i = 0; i < size_depth; ++i, ++undistorted_data, ++map_dist, ++map_x, ++map_yi, ++map_c_off){
    // getting index of distorted depth pixel
    const int index = *map_dist;

    // check if distorted depth pixel is outside of the depth image
    if(index < 0){
      *map_c_off = -1;
      *undistorted_data = 0;
      continue;
    }

    // getting depth value for current pixel
    const float z = depth_data[index];
    *undistorted_data = z;

    // checking for invalid depth value
    if(z <= 0.0f){
      *map_c_off = -1;
      continue;
    }

    // calculating x offset for rgb image based on depth value
    const float rx = (*map_x + (color.shift_m / z)) * color.fx + color_cx;
    const int cx = rx; // same as round for positive numbers (0.5f was already added to color_cx)
    // getting y offset for depth image
    const int cy = *map_yi;
    // combining offsets
    const int c_off = cx + cy * 1920;

    // check if c_off is outside of rgb image
    // checking rx/cx is not needed because the color image is much wider then the depth image
    if(c_off < 0 || c_off >= size_color){
      *map_c_off = -1;
      continue;
    }

    // saving the offset for later
    *map_c_off = c_off;

    if(enable_filter){
      // setting a window around the filter map pixel corresponding to the color pixel with the current z value
      int yi = (cy - filter_height_half) * 1920 + cx - filter_width_half; // index of first pixel to set
      for(int r = -filter_height_half; r <= filter_height_half; ++r, yi += 1920) // index increased by a full row each iteration
      {
        float *it = p_filter_map + yi;
        for(int c = -filter_width_half; c <= filter_width_half; ++c, ++it)
        {
          // only set if the current z is smaller
          if(z < *it)
            *it = z;
        }
      }
    }
  }

  /* Construct 'registered' image. */

  // reseting the pointers to the beginning
  map_c_off = depth_to_c_off;
  undistorted_data = (float*)undistorted->data;

  /* Filter drops duplicate pixels due to aspect of two cameras. */
  if(enable_filter){
    // run through all registered color pixels and set them based on filter results
    for(int i = 0; i < size_depth; ++i, ++map_c_off, ++undistorted_data, ++registered_data){
      const int c_off = *map_c_off;

      // check if offset is out of image
      if(c_off < 0){
        *registered_data = 0;
        continue;
      }
f
      const float min_z = p_filter_map[c_off];
      const float z = *undistorted_data;

      // check for allowed depth noise
      *registered_data = (z - min_z) / z > filter_tolerance ? 0 : *(rgb_data + c_off);
    }

    if (!bigdepth) delete[] filter_map;
  }
  else
  {
    // run through all registered color pixels and set them based on c_off
    for(int i = 0; i < size_depth; ++i, ++map_c_off, ++registered_data){
      const int c_off = *map_c_off;

      // check if offset is out of image
      *registered_data = c_off < 0 ? 0 : *(rgb_data + c_off);
    }
  }
  if (!color_depth_map) delete[] depth_to_c_off;
}

[링크 : https://github.com/OpenKinect/libfreenect2/blob/fd64c5d9b214df6f6a55b4419357e51083f15d93/src/registration.cpp#L123]

'프로그램 사용 > kinect' 카테고리의 다른 글

kinect 1.x, 2.x color <-> depth mapping  (0) 2025.05.07
kinect v2 잘못된 깊이 맵 맵핑  (0) 2025.05.06
kinect rgb - depth mapping  (0) 2025.05.01
kinect 깊이 정밀도  (0) 2025.04.15
libfreenect2 on 2760p 성공  (0) 2024.08.18
Posted by 구차니

리듬도 깨지고 난리 ㅜㅠ

'개소리 왈왈 > 육아관련 주저리' 카테고리의 다른 글

아이나비 dmb 안테나  (0) 2025.05.08
가족 추가요~  (0) 2025.05.06
여유  (0) 2025.05.02
참관수업 그리고 데이트  (2) 2025.04.23
바운스 슈퍼파크 하남 아니.. 미사?  (2) 2025.04.19
Posted by 구차니

휴가가 기니까 좋긴하다.

어디왔다 갔따 해야 한다고 정신없지 않아서 여유롭고 행복하네

'개소리 왈왈 > 육아관련 주저리' 카테고리의 다른 글

가족 추가요~  (0) 2025.05.06
피곤  (0) 2025.05.04
참관수업 그리고 데이트  (2) 2025.04.23
바운스 슈퍼파크 하남 아니.. 미사?  (2) 2025.04.19
헤롱헤롱  (0) 2025.04.14
Posted by 구차니

보기에는 단순하게 변형하고 잘라서 깊이정보를 주는것 같은데.. 맞나?

[링크 : https://tommyhsm.tistory.com/124]

[링크 : https://www.researchgate.net/publication/340527659_Color_and_depth_mapping_of_Kinect_v2]

[링크 : https://m.blog.naver.com/sense_sciencefiction/221967976514]

'프로그램 사용 > kinect' 카테고리의 다른 글

kinect v2 잘못된 깊이 맵 맵핑  (0) 2025.05.06
libfreenect2 rgb / depth 매핑 소스코드 분석  (0) 2025.05.05
kinect 깊이 정밀도  (0) 2025.04.15
libfreenect2 on 2760p 성공  (0) 2024.08.18
libfreenect2 성공  (0) 2024.07.17
Posted by 구차니
게임/ace combat2025. 4. 30. 20:39

잘 안하게 되니 일단 삭제!

'게임 > ace combat' 카테고리의 다른 글

ace combat 7 normal 난이도 끝  (0) 2025.04.06
ace combat 7 멀티 플레이 첫 시도  (2) 2025.03.16
ace combat 7 sp mission완료  (0) 2025.03.15
ace combat 7 - 미션 20, 엔딩  (0) 2025.03.11
ace combat 7 - 미션 19  (0) 2025.03.10
Posted by 구차니