Skip to content

hedanta/NoiEst

 
 

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

38 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

NoiEst

  1. Источники
  2. Участники
  3. Расчёты
  4. Визуализация
  5. Результаты

Источники

описание измеряемых параметров

пример ПО - посмотреть, какие GUI делают в таких задачах https://www.researchgate.net/publication/361718292_iQMetrix-CT_New_software_for_task-based_image_quality_assessment_of_phantom_CT_images

пример проекта на matlab для расчета характеристик https://gitlab.oit.duke.edu/railabs/SameiResearchGroup/imquest

Участники

Лебкова Марина:

  • реализация расчёта и визуализации карты шумов, гистограммы карты шумов, маскирования шумового изображения на области с высокой и низкой частотой шума

Гороховатский Всеволод

  • реализация алгоритма расчёта автокорреляции с последующими преобразованиями и визуализация кривых спектра шумов

Расчёты

Для справок

  • Region of interest (ROI) - локальная рассматриваемая область
  • В целом, шум КТ нестационарный, но часто (и в рамках этой работы) он считается локально неподвижным в пределах ROI

Величина шума

$\sigma(\vec{x})$ - стандартное отклонение по ансамблю повторяющихся изображений $I(\vec{x})$: $$\sigma_{i} = \sqrt { \frac {1}{M - 1} \sum_j^M \left[I_{i, j} - \overline{I_{i}}\right]^2 },$$ где
$\sigma_{i}$ - величина шума i-го вокселя,
$M$ - количество повторных сканирований,
$I_{i, j}$ - единица Хаунсфилда (HU, CT number) i-го вокселя в j-ом изображении,
$\overline{I_{i}}$ - среднее значение HU i-го вокселя по ансамблю повторных изображений.

Автокорреляция шума

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

Автокорреляция $R_{N}(x_{1}, y_{1};x_{2}, y_{2})$ определяется как средняя корреляция между пикселями в точках $(x_{1},y_{1})$ и $(x_{2},y_{2})$: $$R_{N}(x_{1}, y_{1}; x_{2}, y_{2}) = E[N(x_{1}, y_{1}) - N(x_{2}, y_{2})], $$ где E[] - оператор ожидания. Является функцией расстояния между вокселями в направлениях $x$ и $y$:
$R_{N}(x_{1}, y_{1};x_{2}, y_{2}) \rightarrow R_{N}(\Delta x, \Delta y)$

Копия шумового изображения $N(x,y)$ накладывается на оригинал для заданного лага (отставание? задержка?) ($\Delta x, \Delta y$). Попиксельно перемножаются перекрытые пиксели (серая зона) и результат суммируется по всем перекрывающим пикселям. Эта сумма представляет собой одно значение автокорреляции. Процесс производится для всех позиций лага.

autocorrelation

Математическая суммарная корреляция для изображения разрешения $P \times P$ имеет вид: $$R_{Nsum}(\Delta x, \Delta y) = \sum_{x=0}^{P-1} \sum_{y=0}^{P-1}N(x,y) \cdot N(x-\Delta x, y - \Delta y)$$ Итоговая средняя корреляция: $$R_{n}(\Delta x, \Delta y) = \frac{R_{Nsum}(\Delta x, \Delta y)}{n(\Delta x, \Delta y)},$$где $n(\Delta x, \Delta y)$ - количество пикселей, участвовавших в вычислении суммарной корреляции.

Автокорреляция для произвольно сформированной области в пределах $N(x, y)$:

summary correlation

$X$ - умножение по пикселям, $\div$ - деление по пикселям, а $R$ - операция автокорреляции суммы.

Пусть ROI задан бинарной маской $M(x, y)$, которая имеет значение 1 для пикселей, находящихся в области, и 0 для пикселей, не находящихся в области.

  1. Попиксельно умножается $N(x, y)$ на $M(x, y)$ для получения маскированного изображения $N^\prime (x, y)$
  2. Для $N'(x, y)$ вычисляется суммарная корреляция $R_{N^{\prime}sum}(\Delta x, \Delta y)$
  3. Вычисляется количество пикселей, участвовавших в суммировании для каждого положения лага: $$n^\prime (\Delta x, \Delta y) = R_{Msum}(\Delta x, \Delta y) = \sum_{x=0}^{P-1} \sum_{y=0}^{P-1}M(x,y) \cdot M(x-\Delta x, y - \Delta y)$$
  4. Итоговая автокорреляция $R_{N^\prime}$ в пределах ROI вычисляется следующим образом: $$R_{N^\prime}(\Delta x, \Delta y) = \frac{R_{N^{\prime}sum}(\Delta x, \Delta y)}{R_{Msum}(\Delta x, \Delta y)}$$ Важно, что $n^\prime (\Delta x, \Delta y)$ должно быть ненулевым (в исследовании все оцененные автокорреляционные функции были обрезаны до максимального расстояния запаздывания $\pm 128$ пикселей в обоих направлениях).

Спектр мощности шума

NPS - преобразование Фурье автокорреляции шума, описывает распределение дисперсии шума

NPS для заданного ROI рассчитывается по формуле (в данной работе 2D): $$NPS(\vec{u}) = v_{\vec{x}} \cdot \left| \mathcal{F} [R_{N} (\Delta \vec{x})]\right|,$$ где $\vec{u}$ - вектор пространственных частот ($\vec{u} = [u, v]$),
$v_{\vec{x}}$ - размер пикселя ($\vec{x} = [x, y]$),
$\Delta \vec{x}$ - расстояние между двумя пикселями,
$|\mathcal{F}[]|$ - величина дискретного преобразования Фурье.

Визуализация

  1. Из имеющегося изображения $I(\vec{x})$ попиксельно вычесть среднее изображение ансамбля $\mu(\vec{x})$ и получить изображение с нулевым средним шумом $N(\vec{x})$
  2. Умножить $N(\vec{x})$ на маску $M(\vec{x})$ с внутренним радиусом 40 пикселей и внешним радиусом 140 пикселей, в результате чего получится небольшая область $N'(\vec{x})$
  3. Построить карту шумов $\sigma(\vec{x})$ как стандартное отклонение
  4. По карте шумов построить гистограмму величины шумов и определить порог. Все значения левее него считаются низким шумом, правее - высоким.
  5. По вышеуказанному разделению получить бинарные маски для областей с низким и высоким шумом: $M(\vec{x})_ {Low}$ и $M(\vec{x})_ {High}$
  6. Умножить небольшую область $N'(\vec{x})$ на каждую маску и получить отдельные ROI для низкого и высокого шума: $N(\vec{x})_ {Low}$ и $N(\vec{x})_ {High}$
  7. Вычислить автокорреляции шума $R_{N}$ для каждой полученной области: $R_{N}(\Delta \vec{x}_ {Low})$ и $R_{N}(\Delta \vec{x}_{High})$
  8. Применить преобразование Фурье к вычисленным автокорреляциям шума и метод радиального группирования, чтобы получить спектры мощности шума: $NPS(u,v)_ {Low}$ и $NPS(u,v)_ {High}$
  9. Построить кривые $NPS(r)_ {Low}$ и $NPS(r)_ {High}$

Радиальное группирование для получения $NPS(r)$: группируется $NPS(u, v)$ в соответствии с радиальным расстоянием, $r = \sqrt {u^2 + v^2}$, и берётся среднее значение для каждой ячейки (?)

visualisation

Результаты

Для однородного шума

Исходное изображение:

src_img

Среднее ансамбля:

ens_mean

Шум изображения:

noise

Карта шумов:

noise_map

Гистограмма шумов:

noise_hist

Область интереса (ROI):

roi

Маска с низким шумом:

m_low

Маска с высоким шумом:

m_high

Область с низким шумом:

n_low

Область с высоким шумом:

n_high

Автокорреляция области с низким шумом:

r_low

Автокорреляция области с высоким шумом:

r_high

Дискретное преобразование Фурье низкого шума:

nps_low

Дискретное преобразование Фурье высокого шума:

nps_high

Кривая спектра низкого шума:

nps_low_r

Кривая спектра высокого шума:

nps_high_r

Для неоднородного шума

Исходное изображение:

src_img

Среднее ансамбля:

ens_mean

Шум изображения:

noise

Карта шумов:

noise_map

Гистограмма шумов:

noise_hist

Область интереса (ROI):

roi

Маска с низким шумом:

m_low

Маска с высоким шумом:

m_high

Область с низким шумом:

n_low

Область с высоким шумом:

n_high

Автокорреляция области с низким шумом:

r_low

Автокорреляция области с высоким шумом:

r_high

Дискретное преобразование Фурье низкого шума:

nps_low

Дискретное преобразование Фурье высокого шума:

nps_high

Кривая спектра низкого шума:

nps_low_r

Кривая спектра высокого шума:

nps_high_r

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages

  • C++ 89.9%
  • CMake 9.2%
  • Batchfile 0.9%