отображать информацию о пикселе после для цикла (matlab) - PullRequest
1 голос
/ 20 июня 2019

Я использую цикл for для некоторых погодных данных, чтобы указать серьезность грозовой ситуации, см. Код ниже. Мне вот интересно, если я отображаю изображение с помощью imagesc (), есть ли способ, при котором при нажатии на пиксель будет отображаться причина, по которой назначается это значение? Например, если я нажму на пиксель со значением 1, появится текстовое поле со словами «потому что 10

for i = 1:size(cape_fin,1)
for j = 1:size(cape_fin,2)
    if cape_fin(i,j) > 10 && cape_fin(i,j) < 750 && shear_fin(i,j) < 20 
        hail_prob_level_fin(i,j) = 1;
    elseif cape_fin(i,j) > 10 && cape_fin(i,j) < 750 && shear_fin(i,j) > 20 && shear_fin(i,j) < 40
        hail_prob_level_fin(i,j) = 2;
    elseif cape_fin(i,j) > 10 && cape_fin(i,j) < 750 && shear_fin(i,j) > 40
        hail_prob_level_fin(i,j) = 3;
    elseif cape_fin(i,j) > 750 && cape_fin(i,j) < 1300 && shear_fin(i,j) > 20 && shear_fin(i,j) < 40 && tlr_600_800_fin(i,j) < 6.6 || tlr_500_700_fin(i,j) < 7.3
        hail_prob_level_fin(i,j) = 2;
    elseif cape_fin(i,j) > 750 && cape_fin(i,j) < 1300 && shear_fin(i,j) > 20 && shear_fin(i,j) < 40 && tlr_600_800_fin(i,j) > 6.6 || tlr_500_700_fin(i,j) > 7.3
        hail_prob_level_fin(i,j) = 3;    
    elseif cape_fin(i,j) > 750 && cape_fin(i,j) < 1300 && shear_fin(i,j) > 40 && tlr_600_800_fin(i,j) < 6.6 || tlr_500_700_fin(i,j) < 7.3
        hail_prob_level_fin(i,j) = 3;
    elseif cape_fin(i,j) > 750 && cape_fin(i,j) < 1300 && shear_fin(i,j) > 40 && tlr_600_800_fin(i,j) > 6.6 || tlr_500_700_fin(i,j) > 7.3
        hail_prob_level_fin(i,j) = 4;
    elseif cape_fin(i,j) > 750 && cape_fin(i,j) < 1300 && shear_fin(i,j) < 20 && tlr_600_800_fin(i,j) > 7.3 || tlr_500_700_fin(i,j) > 7.9
        hail_prob_level_fin(i,j) = 3;
    elseif cape_fin(i,j) > 750 && cape_fin(i,j) < 1300 && shear_fin(i,j) < 20 && tlr_600_800_fin(i,j) < 7.3 || tlr_500_700_fin(i,j) < 7.9
        hail_prob_level_fin(i,j) = 2;
    elseif cape_fin(i,j) > 1300 && cape_fin(i,j) < 2000 && shear_fin(i,j) > 40 && tlr_600_800_fin(i,j) > 6.6 || tlr_500_700_fin(i,j) > 7.3
        hail_prob_level_fin(i,j) = 4;
    elseif cape_fin(i,j) > 1300 && cape_fin(i,j) < 2000 && shear_fin(i,j) > 40 && tlr_600_800_fin(i,j) < 6.6 || tlr_500_700_fin(i,j) < 7.3
        hail_prob_level_fin(i,j) = 3;
    elseif cape_fin(i,j) > 1300 && cape_fin(i,j) < 2000 && shear_fin(i,j) > 20 && shear_fin(i,j) < 40 && tlr_600_800_fin(i,j) < 7.3 || tlr_500_700_fin(i,j) < 7.9
        hail_prob_level_fin(i,j) = 3;
    elseif cape_fin(i,j) > 1300 && cape_fin(i,j) < 2000 && shear_fin(i,j) > 20 && shear_fin(i,j) < 40 && tlr_600_800_fin(i,j) > 7.3 || tlr_500_700_fin(i,j) > 7.9
        hail_prob_level_fin(i,j) = 3;
    elseif cape_fin(i,j) > 1300 && cape_fin(i,j) < 2000 && shear_fin(i,j) < 20
        hail_prob_level_fin(i,j) = 3;
    elseif cape_fin(i,j) > 2000 && shear_fin(i,j) > 40 && tlr_600_800_fin(i,j) > 6.6 || tlr_500_700_fin(i,j) > 7.3
        hail_prob_level_fin(i,j) = 5;
    elseif cape_fin(i,j) > 2000 && shear_fin(i,j) > 40 && tlr_600_800_fin(i,j) < 6.6 || tlr_500_700_fin(i,j) < 7.3
        hail_prob_level_fin(i,j) = 4;
    elseif cape_fin(i,j) > 2000 && shear_fin(i,j) > 20 && shear_fin(i,j) < 40 && tlr_600_800_fin(i,j) < 7.3 || tlr_500_700_fin(i,j) < 7.9
        hail_prob_level_fin(i,j) = 4;
    elseif cape_fin(i,j) > 2000 && shear_fin(i,j) > 20 && shear_fin(i,j) < 40 && tlr_600_800_fin(i,j) > 7.3 || tlr_500_700_fin(i,j) > 7.9
        hail_prob_level_fin(i,j) = 4;
    elseif cape_fin(i,j) > 2000 && shear_fin(i,j) < 20
        hail_prob_level_fin(i,j) = 4;
    else
        hail_prob_level_fin(i,j) = 1;
    end
end
end

1 Ответ

1 голос
/ 20 июня 2019

Вот простой пример отправной точки:

Пример позволяет пользователю выбрать пиксель с помощью мыши.
Предположим, что координаты пикселей x, y

  1. Считайте значения x, y пикселей из исходных изображений (cape_fin и shear_fin в вашем случае).
  2. Считайте x, y значение пикселя из результирующего изображения (hail_prob_level_fin в вашем случае).
  3. Отформатируйте текстовое сообщение на основе значения пикселей cape_fin, shear_fin и hail_prob_level_fin (отформатируйте сообщение, как вам нравится ...).

Обратите внимание, что это не автоматический механизм, как вы могли бы подумать - вам нужно сделать это по отчеству.

Вот упрощенный пример кода:

A = imread('cameraman.tif'); %Assume A is cape_fin
B = imbinarize(A);   %Assume B is your hail_prob_level_fin (I used imbinarize for simplicity).
figure;imagesc(B); %Display the image (hail_prob_level_fin in your case).
%[x,y,P] = impixel(); %Mark a one pixel, press and press enter (just an example for marking a pixel).

for i = 1:10
    [x,y] = ginput(1); %Let the user select a pixel with the mouse.

    x = round(x);y = round(y); %Round coordinates.

    a = A(y, x); %Get original pixel value (cape_fin in your case, you also need value from shear_fin)
    b = B(y, x); %Get result pixel value (hail_prob_level_fin in your case).

    %Show message box according to value of original and result pixel value:
    waitfor(msgbox(sprintf('B(%d, %d) = %d, because A(%d, %d) = %d', x, y, b, x, y, a)));
end

Пример отображаемого сообщения:
enter image description here

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...