Matlab-绘制特定像素(图像处理)

时间:2019-10-29 09:58:54

标签: matlab image-processing histogram

我目前正在努力处理图像处理\数据绘图问题,并希望从对此事有经验的人那里得到一些反馈。

我将尝试解决该问题,以使其更易于理解:

  1. 我有一个大小为NxM的原始图像( figureB-这是原始图像的蓝色香奈儿),我从该图像中选择一个特定的区域进行研究( NewfigureB ),尺寸为120x170;

  2. 然后将这个区域划分为我所说的宏像素,它们是10x10的数据点(像素)阵列;

  3. 然后我将遮罩应用于所选区域,以仅选择满足某些发光条件的点;

到目前为止,一切都很好。当我尝试在应用发光蒙版时绘制这些宏像素中每个像素的直方图时,就会出现问题。最终目标是在这些直方图中找到峰值。

到目前为止,这是我想出的。任何帮助将不胜感激。

非常感谢

%Make the number of pixels in the matrix divisible
Macropixel = 10; %determine the size of the macropixel
[rows,columns] = size(figureB); %determine dimentions of the matrix used in the calculations
MacropixRows = floor(rows/Macropixel); %determine how many macropixels are in a row of the original matrix
MacropixColumn = floor(columns/Macropixel); %determine how many macropixels are in a column of the original matrix

%define new dim for the matrix
rows = MacropixRows * Macropixel;
columns = MacropixColumn * Macropixel;
NewfigureB = figureB(1:rows,1:columns); %divisible by the size of the macropixels created

%select area 
NewfigureB = NewfigureB(1230:1349,2100:2269);

%create luminescence mask
Lmin=50;
hmax=80;
mask=false(size(NewfigureB));
mask(NewfigureB <Lmin)=true;
mask=mask & (NewfigureB<hmax);

%Apply mask
NewfigureB=NewfigureB(mask);


    for jj = 1:Macropixel:120
        for ii =1:Macropixel:170 
        histogram( NewfigureB(jj:jj+Macropixel-1, ii:ii+Macropixel-1))
        end
    end'''


1 个答案:

答案 0 :(得分:0)

您发布的代码有太多问题。

我已尽力纠正了。
我修改了一些参数来实现我使用的示例图像。
我找不到您的示例图片,所以我使用了following

以下是正确的代码(请阅读注释):

I = imread('Nikon-D810-Image-Sample-7.jpg');

figureB = I(:,:,3);

%Make the number of pixels in the matrix divisible
Macropixel = 10; %determine the size of the macropixel
[rows,columns] = size(figureB); %determine dimentions of the matrix used in the calculations
MacropixRows = floor(rows/Macropixel); %determine how many macropixels are in a row of the original matrix
MacropixColumn = floor(columns/Macropixel); %determine how many macropixels are in a column of the original matrix

%define new dim for the matrix
rows = MacropixRows * Macropixel;
columns = MacropixColumn * Macropixel;
NewfigureB = figureB(1:rows,1:columns); %divisible by the size of the macropixels created

%select area 
NewfigureB = NewfigureB(1230:1349,2100:2269);

%create luminescence mask
Lmin=90;%50; %Change to 90 for testing
hmax=200;%80; %Change to 200 for testing
mask=false(size(NewfigureB));
mask(NewfigureB > Lmin)=true; %I think it should be > Lmin.   %mask(NewfigureB <Lmin)=true;
mask=mask & (NewfigureB<hmax);

%This is not the right way to apply a mask, because the result is a vector (not a matrix).
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%Apply mask
%NewfigureB=NewfigureB(mask);
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

%Assuming there are no zeros in the image, you can set masked elements to zero:  
NewfigureB(~mask) = 0;



for jj = 1:Macropixel:120
    for ii =1:Macropixel:170

        %Copy NewfigureB(jj:jj+Macropixel-1, ii:ii+Macropixel-1) into temporary matrix MB:
        MB = NewfigureB(jj:jj+Macropixel-1, ii:ii+Macropixel-1);

        %Remove the zeros from MB (zeros are masked elements).
        %The result is a vector (not a matrix).
        MB = MB(MB ~= 0);

        %histogram( NewfigureB(jj:jj+Macropixel-1, ii:ii+Macropixel-1))
        figure; %Open new figure for each histogram. (I don't know if it's a good idea).
        histogram(MB); %Plot the histogram of vector MB.
    end
end

可能与意图完全不符。
希望它能给您带来帮助...