如何在没有 Matlab 内置函数的情况下编写 3D 直方图代码?

尼司林

我想创建一个直方图代码,知道它将计算一个像素的 3 个值的出现次数。这个想法是我有 3 个矩阵 (L1im, L2im, L3im) 表示从图像中提取的信息,每个矩阵的大小是 256*226,我想计算让我们说 (52,6,40 ) 发生(每个数字对应一个矩阵/组件,但它们都是相同的像素)。

我试过这个,但它没有产生正确的结果:

for i = 1 : 256
    for j = 1 : 256
        for k = 1 : 256
            if  (L1im == i) &  (L2im == j) & (L3im == k)
                myhist(i,j,k)= myhist(i,j,k)+1;
            end
        end
    end
end
迈克尔Tr7

彩色三元组直方图

请记住,绘制整个 RGB 三元组直方图是一项艰巨的任务,因为您可以拥有 256 × 256 × 256 = 16,777,216 种可能的独特颜色组合。我认为一个稍微更易于管理的任务是计算图像中唯一 RGB 值的直方图(因为其余部分无论如何都会为零)。这仍然是一项相当大的任务,但如果图像相当小,则可能是合理的。下面我认为一个不错的分箱替代方法是将图像调整为较小数量的像素。这可以通过使用该imresize函数来完成我相信这会降低图像的保真度,并且几乎充当可以“有点”模拟分箱行为的舍入函数。在本例中,我将矩阵字符串数组转换为连接通道L1imL2imL3im的图像。下面是一个演示,我使用内置于 MATLAB 中的名为saturn.png. A Resize_Factorof 1 将导致最多的 bin 数量,并且 bin 的数量会随着Resize_Factor增加而减少请记住,如果使用Resize_Factor.

RGB 三元组直方图

Resize_Factor = 200;
RGB_Image = imread("saturn.png");
[Image_Height,Image_Width,Number_Of_Colour_Channels] = size(RGB_Image);
Number_Of_Pixels = Image_Height*Image_Width;

RGB_Image = imresize(RGB_Image,[Image_Height/Resize_Factor Image_Width/Resize_Factor]);
L1im = RGB_Image(:,:,1);
L2im = RGB_Image(:,:,2);
L3im = RGB_Image(:,:,3);

L1im_String = string(L1im);
L2im_String = string(L2im);
L3im_String = string(L3im);

RGB_Triplets = L1im_String + "," + L2im_String + "," + L3im_String;
Unique_RGB_Triplets = unique(RGB_Triplets);

for Colour_Index = 1: length(Unique_RGB_Triplets)
    RGB_Colour = Unique_RGB_Triplets(Colour_Index);
    Unique_RGB_Triplets(Colour_Index,2) = nnz(RGB_Colour == RGB_Triplets); 
end

Counts = str2double(Unique_RGB_Triplets(:,2));
Scaling_Factor = Number_Of_Pixels/sum(Counts);
Counts = Counts.*Scaling_Factor;

if sum(Counts) == Number_Of_Pixels
    disp("Sum of histogram is equal to the number of pixels");
end

bar(Counts);
title("RGB Triplet Histogram");
xlabel("RGB Triplets"); ylabel("Counts");

Current_Axis = gca;
Scale = (1:length(Unique_RGB_Triplets));
set(Current_Axis,'xtick',Scale,'xticklabel',Unique_RGB_Triplets);
Angle = 90;
xtickangle(Current_Axis,Angle);

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何在没有for循环的情况下编写此matlab代码

在不使用Matlab内置函数的情况下,RGB图像上的颜色直方图的实现示例

如何在不使用MATLAB中内置函数的情况下进行10倍交叉验证?

Matlab:绘制3D直方图

如何在Matlab中使用3D直方图对带有计数的数据索引进行标记

如何在没有3D VR护目镜的情况下测试webvr?

如何在没有GUI的情况下调试Matlab代码

如何在没有for和if语句的情况下编写代码

测试驱动的开发-如何在没有实现代码的情况下编写测试

如何在没有重复代码的情况下编写或语句(VBA)

如何在没有“需要”注释的情况下编写代码以提高可读性?

如何在没有foreach循环的情况下编写代码?

如何在没有一行 for 循环的情况下编写此 Python 代码?

可以在没有std :: invoke的情况下编写此成员函数选择代码吗?

3D游戏如何在没有每个角度都有精灵的情况下渲染对象?

如何在没有导入的情况下 2d 截断 3d python 列表

如何在没有内联代码的情况下使用 lambda 函数部署 cloudformation?

如何在不复制代码的情况下编写子类构造函数?

Matlab:如何在没有Excel>比较字符的情况下将num与Excel的num进行比较,这会使我的代码错误

如何在不使用内置地图或星图的情况下编写类似星图的函数?

Web3.py:如何在没有源代码的情况下调用令牌函数

MatLab:从采样数据创建3D直方图

如何在python中重新编写矩阵3D Matlab脚本

如何在条之间没有共同垂直线的情况下绘制直方图?

在没有for循环的情况下,如何在Matlab中将矩阵提升为幂矢量?

Matlab:如何在没有暴力for循环的情况下执行行操作?

如何在没有安装文件的情况下安装Matlab?

如何在 Windows 中没有桌面的情况下启动 MATLAB

如何在没有内置函数的情况下反转字符串javascript?