Изображения слайдов микроскопа загружаются в виде нескольких небольших мозаичных изображений с использованием открытого слоя.

У меня есть изображения предметных стекол большего размера (более 10 ГБ) (ndpi, svs, tiff). Чтобы отобразить существующего участника проекта, используйте версии открытого слоя 3. При загрузке некоторые изображения преобразуются в несколько небольших плиток (происходят вызовы API tileUrlFunction 40) и загружаются быстро, но изображения того же типа и размера не преобразуются в маленькие плитки (tileUrlFunction вызывает 1 раз изображения API).

            var projection = new ol.proj.Projection({
      code: 'meters',
      units: 'm',
      getPointResolution: function (resolution) {
        return resolution * params.umperpixel[0];
      }
    });

    var extent = [params.left[0], -(params.totYpix[0] + params.bottom[0]), params.totXpix[0] + params.right[0], params.top[0]];

    var tilegrid = new ol.tilegrid.WMTS({
      matrixIds: resolutions,
      origins: origins,
      sizes: matrixSizes,
      tileSizes: sizes,
      resolutions: resolutions
    });

    var zoomTilegrid = new ol.tilegrid.WMTS({
      matrixIds: [resolutions[resolutions.length - 1]],
      origins: [origins[origins.length - 1]],
      sizes: [matrixSizes[matrixSizes.length - 1]],
      tileSizes: [sizes[sizes.length - 1]],
      resolutions: [resolutions[resolutions.length - 1]]
    });

    slide.source = new ol.source.TileImage({
      crossOrigin: 'anonymous',
      wrapX: false,
      projection: projection,
      tileGrid: tilegrid,
      tileUrlFunction: function (tileCoord) {
        return fetchTiles(slide, tileCoord, params);
      }
    });
    slide.zoomSource = new ol.source.TileImage({
      crossOrigin: 'anonymous',
      wrapX: false,
      projection: projection,
      tileGrid: zoomTilegrid,
      tileUrlFunction: function (tileCoord) {
        return fetchTiles(slide, tileCoord, params, true);
      }
    });
    function fetchTiles(slide, tileCoord, params, forZoom) {
      if (tileCoord !== null) {
        var res = angular.copy(slide.map.getView().getResolution());
        var key = params.resolutions.indexOf(res),
          x = tileCoord[1],
          y = -tileCoord[2] - 1,
          level = forZoom ?
            params[params.format[key] + 'level'].slice(-1) :
            params[params.format[key] + 'level'][key];
        return getTileUrl() + 'fetchimage.cgi?' + serializeData({
          'PATH': (params.prefix[key] === 'ndpi' ||
            params.prefix[key] === 'svs' ||
            params.prefix[key] === 'webslide') ?
            path :
            path + '.' + params.prefix[key],
          'SLIDEFORMAT': params.format[key],
          'X': x,
          'Y': y,
          'IMAGEFORMAT': params.type[key],
          'LEVEL': level
        });
      }

Значения массива tileCoord, передающие комбинацию X и Y, приведены ниже, для всех fetchimage.cgi уровень равен 4,

      1-1 (Level-4)
2-1
3-1
4-1
5-1
6-1
7-1
8-1
9-1
10-1
11-1
12-1
13-1

1-2 (Level-4)
2-2
3-2
4-2
5-2
6-2
8-2
7-2
9-2
10-2
11-2
12-2
13-2

1-3 (Level-4)
2-3
3-3
4-3
5-3
6-3
7-3
8-3
9-3
10-3
11-3
12-3
13-3

Бывший. http://testdomain/fetchimage.cgi?PATH=fullfilename.ndpi&SLIDEFORMAT=ndpi&X=13&Y=1&IMAGEFORMAT=jpg&LEVEL=4

Я не уверен, как считать все изображения слайдов маленькими плитками.

0 ответов

Другие вопросы по тегам