Arhn - архитектура программирования

Быстрое вычисление совместной гистограммы двух изображений

В контексте регистрации изображений мне нужно вычислить совместную гистограмму двух изображений, т. е. каждая гистограмма (i, j) содержит количество пикселей, интенсивность которых равна i на первом изображении и j на втором.

Для этого я зацикливаюсь на интенсивности:

clear all; close all; clc

M = 1024;
N = 1024;

world_map=NaN(M,N,2);

rail_1 = rgb2gray(imread('img2.bmp'));

% Initial misregistration
dx = 12;
dy = 15;

[M1,N1] = size(rail_1);

% Center the 1st image on the world_map first layer
world_map(floor(M/2-M1/2):floor(M/2+(M1/2-1)),floor(N/2-N1/2):floor(N/2+(N1/2-1)),1) = rail_1;

% Translate the same image on the world_map second layer
world_map(floor(M/2-M1/2-dx):floor(M/2+(M1/2-1-dx)),floor(N/2-N1/2-dy):floor(N/2+(N1/2-1)-dy),2) = rail_1;


figure
h1=imagesc(world_map(:,:,1));
hold on
h2=imagesc(world_map(:,:,2));
set(h2,'AlphaData',0.5)
colormap gray

% find the overlapping area of the two images
overlap = find(~isnan(world_map(:,:,1)) & ~isnan(world_map(:,:,2)));
rail_1 = world_map(:,:,1);
rail_2 = world_map(:,:,2);

% compute the joint histogram (we here suppose that we have 256 gray level)
histo = zeros(256,256);

for i=1:256
    for j=1:256

        histo(i,j) = numel(find(rail_1(overlap)==i-1 & rail_2(overlap)==j-1));

    end
end

Однако такой алгоритм слишком медленный для моего проекта, и я пытался сделать это без циклов for, но до сих пор не нашел решения для решения моей проблемы.

Я надеюсь, что вы, ребята, могли бы помочь мне решить эту проблему;)


  • Пытались ли вы профилировать свой код, чтобы определить, что вызывает его быть медленным? 11.06.2015
  • Не позволяйте названию ввести вас в заблуждение. Чтобы вычислить совместную энтропию в дублирующем посте, вам нужно знать, как рассчитать совместную гистограмму, которую описывает мой ответ. Это можно сделать тремя строками кода. 12.06.2015
  • Спасибо за ваши ответы. Я использовал accumarray, как вы предлагаете в другом посте. Однако мне было интересно, можно ли заставить accumarray предоставить совместную гистограмму между 0 и 255, даже если некоторые из этих значений интенсивности не существуют в обоих изображениях? 17.06.2015

Новые материалы

Коллекции публикаций по глубокому обучению
Последние пару месяцев я создавал коллекции последних академических публикаций по различным подполям глубокого обучения в моем блоге https://amundtveit.com - эта публикация дает обзор 25..

Представляем: Pepita
Фреймворк JavaScript с открытым исходным кодом Я знаю, что недостатка в фреймворках JavaScript нет. Но я просто не мог остановиться. Я хотел написать что-то сам, со своими собственными..

Советы по коду Laravel #2
1-) Найти // You can specify the columns you need // in when you use the find method on a model User::find(‘id’, [‘email’,’name’]); // You can increment or decrement // a field in..

Работа с временными рядами спутниковых изображений, часть 3 (аналитика данных)
Анализ временных рядов спутниковых изображений для данных наблюдений за большой Землей (arXiv) Автор: Рольф Симоэс , Жильберто Камара , Жильберто Кейрос , Фелипе Соуза , Педро Р. Андраде ,..

3 способа решить квадратное уравнение (3-й мой любимый) -
1. Методом факторизации — 2. Используя квадратичную формулу — 3. Заполнив квадрат — Давайте поймем это, решив это простое уравнение: Мы пытаемся сделать LHS,..

Создание VR-миров с A-Frame
Виртуальная реальность (и дополненная реальность) стали главными модными терминами в образовательных технологиях. С недорогими VR-гарнитурами, такими как Google Cardboard , и использованием..

Демистификация рекурсии
КОДЕКС Демистификация рекурсии Упрощенная концепция ошеломляющей О чем весь этот шум? Рекурсия, кажется, единственная тема, от которой у каждого начинающего студента-информатика..