手动实现bayern转RGB

2023-12-31

我正在尝试实现图像转换 Bayern Pattern -> RGB

I uploaded this image: mosaic picture

这是我的代码片段:

import cv2
import numpy as np
from matplotlib import pyplot as plt
import math
import os
PATH = 'data/'

file_path = os.path.join(PATH, 'oldwell_mosaic.png')
img = cv2.imread(file_path, 0)
w, h = img.shape
new_image = np.zeros((w, h, 3), dtype = np.uint8)
# Green
new_image[1::2,1::2,1] = img[1::2,1::2]
new_image[::2, ::2, 1] = img[::2, ::2]

# Blue
new_image[1::2,::2,0] = img[1::2,::2]

# Red
new_image[::2, 1::2, 2] = img[::2, 1::2]

In the above example I use this pattern:
enter image description here

我应该插入缺失的值,但“无值”的地方实际上用零填充。当我执行此操作时:

kernel = np.ones((4,4), np.float)/16
new_image[:,:,2] = cv2.filter2D(new_image[:, :, 2], -1, kernel)

我没有得到预期的结果,因为我在插值中使用了零。


我没有使用python nor opencv但很好奇所以这里水平较低C++对此的方法:

  1. 按波段分别处理图像
  2. 对于每个像素,您需要强度累加器acc[][]和柜台cnt[][]

    可以避免对计数器的需要。您可以使用以类似方式编码的预定义计数,然后mask在我的代码中,但这意味着处理图像边缘和角落的特殊情况。我选择了acc,cnt为了简单起见(它们很容易适应 32 位,所以没有必要不使用它)。

    除法可以通过位移位来完成(边缘和角落除外)

  3. clear acc,cnt与零

  4. 处理包含已处理带的每个像素

    将谱带强度添加到acc和增量cnt到像素位置以及不包含该带的所有邻居。

  5. 整个图像处理后计算像素带值

    简单地通过

    pixel[y][x].band = acc[y][x]/cnt[y][x]
    

    这样你就可以使用相同的缓冲区acc,cnt为下一个乐队。

My C++执行:

    picture pic0,pic1,pic2; // pic0 - original input image,pic1 output, pic2 temp band interpolation
    int x,y,a,b,i,j;
    const int mask[3][6][6]=    // bayern mask for eac band 3 bands and common size of 2x2 and 3x3 is 6x6
        {
        // blue
            {
            {0,0,0,0,0,0},
            {0,1,0,1,0,1},
            {0,0,0,0,0,0},
            {0,1,0,1,0,1},
            {0,0,0,0,0,0},
            {0,1,0,1,0,1},
            },
        // green
            {
            {0,1,0,1,0,1},
            {1,0,1,0,1,0},
            {0,1,0,1,0,1},
            {1,0,1,0,1,0},
            {0,1,0,1,0,1},
            {1,0,1,0,1,0},
            },
        // red
            {
            {1,0,1,0,1,0},
            {0,0,0,0,0,0},
            {1,0,1,0,1,0},
            {0,0,0,0,0,0},
            {1,0,1,0,1,0},
            {0,0,0,0,0,0},
            },
        };
    // prepare buffers
    pic1.resize(pic0.xs  ,pic0.ys  ); pic1.pf=_pf_rgba; pic1.clear(0);
    pic2.resize(pic0.xs+2,pic0.ys+2); pic2.pf=_pf_uu;   // size enlarged to avoid edge conditions statements
    // process bands
    for (b=0;b<3;b++)
        {
        pic2.clear(0);              // clear acc,cnt
        for (j=0,y=0;y<pic0.ys;y++,(j==5)?j=0:j++)
         for (i=0,x=0;x<pic0.xs;x++,(i==5)?i=0:i++)
          if (mask[b][j][i])        // process only band b pixels
            {
            a=pic0.p[y][x].db[0];   // grayscale intensity
            // add to 4 neighbors
            pic2.p[y+0][x+1].dw[0]+=a; pic2.p[y+0][x+1].dw[1]++;
            pic2.p[y+1][x+0].dw[0]+=a; pic2.p[y+1][x+0].dw[1]++;
            pic2.p[y+1][x+1].dw[0]+=a; pic2.p[y+1][x+1].dw[1]++;
            pic2.p[y+1][x+2].dw[0]+=a; pic2.p[y+1][x+2].dw[1]++;
            pic2.p[y+2][x+1].dw[0]+=a; pic2.p[y+2][x+1].dw[1]++;
            if (b==picture::_g) continue;
            // add to 8 neighbors (for r,b bands)
            pic2.p[y+0][x+0].dw[0]+=a; pic2.p[y+0][x+0].dw[1]++;
            pic2.p[y+0][x+2].dw[0]+=a; pic2.p[y+0][x+2].dw[1]++;
            pic2.p[y+2][x+0].dw[0]+=a; pic2.p[y+2][x+0].dw[1]++;
            pic2.p[y+2][x+2].dw[0]+=a; pic2.p[y+2][x+2].dw[1]++;
            }
        for (y=0;y<pic1.ys;y++) // convert to color band
         for (x=0;x<pic1.xs;x++)
          pic1.p[y][x].db[b]=pic2.p[y+1][x+1].dw[0]/pic2.p[y+1][x+1].dw[1];
        }

我使用自己的图片类来存储图像,因此一些成员是:


xs,ys是图像的大小(以像素为单位)
p[y][x].dd像素位于(x,y)位置为 32 位整数类型
clear(color)清除整个图像color
resize(xs,ys)将图像大小调整为新分辨率
bmp is VCL封装的GDI位图与Canvas access
pf保存图像的实际像素格式:

enum _pixel_format_enum
    {
    _pf_none=0, // undefined
    _pf_rgba,   // 32 bit RGBA
    _pf_s,      // 32 bit signed int
    _pf_u,      // 32 bit unsigned int
    _pf_ss,     // 2x16 bit signed int
    _pf_uu,     // 2x16 bit unsigned int
    _pixel_format_enum_end
    };


color像素编码如下:

union color
    {
    DWORD dd; WORD dw[2]; byte db[4];
    int i; short int ii[2];
    color(){}; color(color& a){ *this=a; }; ~color(){}; color* operator = (const color *a) { dd=a->dd; return this; }; /*color* operator = (const color &a) { ...copy... return this; };*/
    };


这些乐队是:

enum{
    _x=0,   // dw
    _y=1,

    _b=0,   // db
    _g=1,
    _r=2,
    _a=3,

    _v=0,   // db
    _s=1,
    _h=2,
    };

拜仁面具有1对于包含色带和项目的像素mask[band][j=0][i=0]代表pixel[y=0][x=0]。最后是结果:对于您的输入图像:

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

手动实现bayern转RGB 的相关文章

  • SQLAlchemy 通过关联对象声明式多对多自连接

    我有一个用户表和一个朋友表 它将用户映射到其他用户 因为每个用户可以有很多朋友 这个关系显然是对称的 如果用户A是用户B的朋友 那么用户B也是用户A的朋友 我只存储这个关系一次 除了两个用户 ID 之外 Friends 表还有其他字段 因此
  • 使用带有关键字参数的 map() 函数

    这是我尝试使用的循环map功能于 volume ids 1 2 3 4 5 ip 172 12 13 122 for volume id in volume ids my function volume id ip ip 我有办法做到这一点
  • Python - StatsModels、OLS 置信区间

    在 Statsmodels 中 我可以使用以下方法拟合我的模型 import statsmodels api as sm X np array 22000 13400 47600 7400 12000 32000 28000 31000 6
  • 从字符串中删除识别的日期

    作为输入 我有几个包含不同格式日期的字符串 例如 彼得在16 45 我的生日是1990年7月8日 On 7 月 11 日星期六我会回家 I use dateutil parser parse识别字符串中的日期 在下一步中 我想从字符串中删除
  • 如何替换 pandas 数据框列中的重音符号

    我有一个数据框dataSwiss其中包含瑞士城市的信息 我想用普通字母替换带有重音符号的字母 这就是我正在做的 dataSwiss Municipality dataSwiss Municipality str encode utf 8 d
  • 如何从网页中嵌入的 Tableau 图表中抓取工具提示值

    我试图弄清楚是否有一种方法以及如何使用 python 从网页中的 Tableau 嵌入图形中抓取工具提示值 以下是当用户将鼠标悬停在条形上时带有工具提示的图表示例 我从要从中抓取的原始网页中获取了此网址 https covid19 colo
  • 测试 python Counter 是否包含在另一个 Counter 中

    如何测试是否是pythonCounter https docs python org 2 library collections html collections Counter is 包含在另一个中使用以下定义 柜台a包含在计数器中b当且
  • Python pickle:腌制对象不等于源对象

    我认为这是预期的行为 但想检查一下 也许找出原因 因为我所做的研究结果是空白 我有一个函数可以提取数据 创建自定义类的新实例 然后将其附加到列表中 该类仅包含变量 然后 我使用协议 2 作为二进制文件将该列表腌制到文件中 稍后我重新运行脚本
  • 如何使用 OpencV 从 Firebase 读取图像?

    有没有使用 OpenCV 从 Firebase 读取图像的想法 或者我必须先下载图片 然后从本地文件夹执行 cv imread 功能 有什么办法我可以使用cv imread link of picture from firebase 您可以
  • 从 Flask 访问 Heroku 变量

    我已经使用以下命令在 Heroku 配置中设置了数据库变量 heroku config add server xxx xxx xxx xxx heroku config add user userName heroku config add
  • IO 密集型任务中的 Python 多线程

    建议仅在 IO 密集型任务中使用 Python 多线程 因为 Python 有一个全局解释器锁 GIL 只允许一个线程持有 Python 解释器的控制权 然而 多线程对于 IO 密集型操作有意义吗 https stackoverflow c
  • 使用 \r 并打印一些文本后如何清除控制台中的一行?

    对于我当前的项目 有一些代码很慢并且我无法使其更快 为了获得一些关于已完成 必须完成多少的反馈 我创建了一个进度片段 您可以在下面看到 当你看到最后一行时 sys stdout write r100 80 n I use 80覆盖最终剩余的
  • Pandas:merge_asof() 对多行求和/不重复

    我正在处理两个数据集 每个数据集具有不同的关联日期 我想合并它们 但因为日期不完全匹配 我相信merge asof 是最好的方法 然而 有两件事发生merge asof 不理想的 数字重复 数字丢失 以下代码是一个示例 df a pd Da
  • 将图像分割成多个网格

    我使用下面的代码将图像分割成网格的 20 个相等的部分 import cv2 im cv2 imread apple jpg im cv2 resize im 1000 500 imgwidth im shape 0 imgheight i
  • 向 Altair 图表添加背景实心填充

    I like Altair a lot for making graphs in Python As a tribute I wanted to regenerate the Economist graph s in Mistakes we
  • 为字典中的一个键附加多个值[重复]

    这个问题在这里已经有答案了 我是 python 新手 我有每年的年份和值列表 我想要做的是检查字典中是否已存在该年份 如果存在 则将该值附加到特定键的值列表中 例如 我有一个年份列表 并且每年都有一个值 2010 2 2009 4 1989
  • 有没有办法检测正在运行的代码是否正在上下文管理器内执行?

    正如标题所述 有没有办法做到这样的事情 def call back if called inside context print running in context else print called outside context 这将
  • 如何计算 pandas 数据帧上的连续有序值

    我试图从给定的数据帧中获取连续 0 值的最大计数 其中包含来自 pandas 数据帧的 id date value 列 如下所示 id date value 354 2019 03 01 0 354 2019 03 02 0 354 201
  • 基于 OpenCV 边缘的物体检测 C++

    我有一个应用程序 我必须检测场景中某些项目的存在 这些项目可以旋转并稍微缩放 更大或更小 我尝试过使用关键点检测器 但它们不够快且不够准确 因此 我决定首先使用 Canny 或更快的边缘检测算法 检测模板和搜索区域中的边缘 然后匹配边缘以查
  • 导入错误:没有名为 site 的模块 - mac

    我已经有这个问题几个月了 每次我想获取一个新的 python 包并使用它时 我都会在终端中收到此错误 ImportError No module named site 我不知道为什么会出现这个错误 实际上 我无法使用任何新软件包 因为每次我

随机推荐

  • 在父类中记录静态方法

    我有一个抽象类 Parent 有 2 个子类 A 和 B Parent 有一个名为 do 的静态方法 我想知道是否有一种方法可以让该静态方法在 A 类被称为 A do 时在 Logger 中添加日志信息 在被称为 B do 时在 Logge
  • PHP Exception::getCode() 与其实现的 Throwable 接口相矛盾

    我发现了一个我无法理解的矛盾 异常 getCode https www php net manual en exception getcode php 有这样的定义 final公共异常 getCode 无效 mixed 附说明 返回异常代码
  • 什么存储位置(SQL Server 或文件系统)可以提高保存 tiff 图像的性能?

    我们的系统需要存储大小约为 3k 的 tiff 图像 我们在给定时间收到约 300 张图像 需要快速处理它们 一旦收到约 100 000 张图像 这些图像就会从我们的系统转移到另一个存档系统或被清除 我正在寻找图像文件初始保存的最佳性能 传
  • 有没有关于 gremlin 'match()' 如何工作的文档?

    我正在用 match 遍历编写 gremlin 查询 某些模式匹配的行为似乎与其他模式语言不同 输入遍历器值如何与模式变量绑定 g V A B match as x as y project x y gt x v A y v A gt x
  • 使用summary r 进行逻辑值计数

    在数据框中 我有一列包含 Y 和 N 值 该数据框还有一个 id 列 我想创建两列 一列包含 Y 总数 另一列包含每个 id 的 N 总数 我尝试使用 dplyr summarise 函数执行此过程 group by id gt summa
  • Polymer 2.0 webcomponents-loader.js 缺少 Edge polyfill

    我们目前将项目从 Polymer 1 更新到 Polymer 2 混合版本 我知道 webcomponents hi sd ce js 是 Edge 的 polyfill 在 Microsoft Edge 上测试页面时 我现在收到一条错误
  • 服务器端验证 Facebook 用户

    我正在编写一个 Facebook 应用程序 其中列出了用户的朋友 并与用户提供的有关他们的信息 存储在 Google App Engine 数据库中 进行交叉引用 我的应用程序的运行方式如下 用户登录 Facebook 后 通过 Faceb
  • 如何在页面刷新时保留无线电输入状态

    我有一个表单 如果用户提交有错误的表单 以防页面刷新 我需要在该表单上存储所有单选按钮的状态 我想实现与此非常相似的目标 function example input type radio checked each function thi
  • 如何检查复制快照代理状态?

    我想在使用此语句启动代理后检查代理的状态 EXEC sp startpublication snapshot publication 因为我想做下一步 需要工作已经开始 我不相信有内置复制存储过程来检查快照代理状态 我可能是错的 但是 您可
  • 将 Maven 输出发送到文件

    在 Windows 7 上 我尝试发送maven 3命令到文本文件 我从我试图分析的项目的根目录调用该命令 命令是 mvn dependency tree Dverbose Dincludes commons collections Dou
  • 具有零值双精度的奇怪 if 语句行为

    有人愿意向我解释一下它的价值吗this oBalance QouteBalance因小于零而被评估为真 但显然不是 请参见下图 在比较 C 中的双精度数时 我是否遗漏了一些基本的东西 public double QouteBalance g
  • 如何使用apache Spark的MLlib的线性回归?

    我是apache Spark的新手 从MLlib的文档中 我找到了scala的示例 但我真的不知道scala 有人知道java中的示例吗 谢谢 示例代码是 import org apache spark mllib regression L
  • 以编程方式获取调试信息

    Using include
  • git 结帐。添加稀疏签出排除的目录

    在稀疏结账场景中 该命令git checkout 恢复应该被忽略的目录 这是设计使然 还是 Git 中的潜在问题 我在用着git checkout 放弃我对工作副本所做的任何更改 是否有另一个命令可以执行相同的操作并且不会遇到此问题 这是一
  • “snprintf_s”的错误安全感

    MSVC的 安全 sprintf函数有一个模板版本 它 知道 目标缓冲区的大小 然而 这段代码在结束后很高兴地在堆栈上绘制了 567890bytes char bytes 5 snprintf s bytes TRUNCATE s 1234
  • 最小起订量 - 如何验证静态类调用和委托?

    我刚刚开始阅读 Moq 框架 并考虑将其应用到我现有的代码中 我可以提出一个测试用例来验证基本函数调用 但现在坚持将其应用于委托和静态类 以下是被测系统 SUT public class SUT ISUT private IInterfac
  • 在 Swift 中,我们是“发送消息”还是“调用方法/函数”?

    Swift 在编译时是否保留方法查找列表 或者是否调用特定内存位置中的函数 关于this http davedelong tumblr com post 58428190187 an observation on objective c 我
  • 在 Mathematica 中求解二元递归方程,这可能吗?

    我尝试使用RSolve求解二变量递归方程数学 但它只是重复我输入的内容 是否可以求解两个变量递归方程数学 也许您应该在问题中包含方程式 因为您可能只是使用RSolve错误地 数学可以解一些二变量递推方程 但不是全部 有时免费套餐Guess
  • HTML 源代码中没有嵌套链接元素的嵌套超链接区域

    我想要一些看起来和行为都像大矩形 整页宽 内的超链接的东西 这也是超链接 下面是它应该是什么样子的 ASCII 艺术表示 Some text link 整个外部矩形 块元素 将成为超链接 在这个矩形内应该有一些文本 并且在该文本的末尾应该有
  • 手动实现bayern转RGB

    我正在尝试实现图像转换 Bayern Pattern gt RGB I uploaded this image 这是我的代码片段 import cv2 import numpy as np from matplotlib import py