- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我女朋友说她可能会开始做一些Cross Stitching她可能想要画一幅画、图像或其他什么。在那一刻,我想“好吧,我应该能够创建一个 Matlab 代码来获取任何图像并将其转换为十字绣图案”。 It turns out I am not the first one to think about this.
但我不确定我做的是否正确。
让我们举个例子:
假设一个像素化图像,任何尺寸,任何调色板。例如以下来自像素艺术家 Waneella 的屏幕截图
假设我们不想缩放图像,结果图像将具有与原始图像相同的像素数量(否则 imresize
即可)。
现在的问题是仅使用可用调色板中的调色板。我决定使用DCM调色板,主要是因为我找到了它的RGB转换。
我创建了颜色量化。我使用 Lab 颜色在 DCM 调色板中查找最接近的颜色并使用该颜色。
clear;clc;
% read image (its a gif)
[img,C]=imread('wn.gif');
% Convert it to RGBimage.
img2=img(:,:,:,3);
imgC=zeros([size(img2) 3]);
for ii=1:size(img2,1)
for jj=1:size(img2,2)
imgC(ii,jj,:)=C(img2(ii,jj)+1,:);
end
end
img=imgC;
imshow(img)
% read DCMtoRB conversion
fid=fopen('DCMRGB.txt');
fgets(fid);
ii=0;
tline = fgets(fid);
while ischar(tline)
ii=ii+1;
table{ii}=tline;
tline = fgets(fid);
end
fclose(fid);
for ii=1:size(table,2)
DCMRGB(ii,1)=str2num(table{ii}(1:4));
DCMRGB(ii,4)=hex2dec(table{ii}(end-5:end-4));
DCMRGB(ii,3)=hex2dec(table{ii}(end-7:end-6));
DCMRGB(ii,2)=hex2dec(table{ii}(end-9:end-8));
end
% origColous=reshape(img, [], 3);
Colours=double(unique(reshape(img, [], 3), 'rows'));
Ncol=size(Colours,1);
cform = makecform('srgb2lab');
DCMLab = applycform(DCMRGB(:,2:4)./255,cform);
Colourslab = applycform(Colours,cform);
eudist=@(p)sqrt(p(:,1).^2+p(:,2).^2+p(:,3).^2);
Cind=zeros(Ncol,1);
for ii=1:Ncol
aux=ones(size(DCMLab,1),3);
aux(:,1)=Colourslab(ii,1);
aux(:,2)=Colourslab(ii,2);
aux(:,3)=Colourslab(ii,3);
d=eudist(DCMLab-aux);
[~,Cind(ii)]=min(d);
end
% now DCMRGB will have DCMcode, R, G, B
% Perform map conversion
img2=zeros(size(img));
indimg=zeros(size(img,1),size(img,2));
for ii=1:size(img,1)
for jj=1:size(img,2)
%wich colour is the pixel?
[~,indx]=ismember(double(squeeze(img(ii,jj,:)))',Colours,'rows');
indimg(ii,jj)=Cind(indx);
img2(ii,jj,:)=DCMRGB(Cind(indx),2:4);
end
end
%%
subplot(121)
imshow((img))
% subplot(222)
% [X_dither,map]=rgb2ind(img,DCMRGB(:,2:4)./255,'nodither');
% imshow(uint16(X_dither),map);
subplot(122)
imshow(double(img2)./255)
结果如下:
但是,在此网页中:http://www.picturecraftwork.com/正如你所看到的,网页中颜色的选择是不同的,实际上它更有意义,即使没有真实的颜色图也给人一种很好的感觉。
经过多次思考,我相信可能有两件事我需要改变和实现。
1.- 我不 100% 相信 DCMRGB 值。我给该公司发了电子邮件,寻求有关他们调色板的更多信息。
2.- 亮度、对比度、色调和饱和度值对输出有巨大影响。
如何使用 Matlab 修改所需图像中的这 4 个值(如网页中所示)?
<小时/><小时/>DMC2RGB 文件:(如果需要,我可以将其复制粘贴到此处)
DCM 调色板:
最佳答案
好吧,这是一个概括性的建议,尽管我还没有取得很好的结果。
1) 首先使用 rgb2ind
和 nodither
将原始图像减少为合理的颜色数量,仅指定颜色数量(而不是使用的贴图)。
[I_ind, old_map] = rgb2ind(I,64,'nodither);
您可以尝试适合给定图像的颜色数量,而不会丢失太多细节。基本上,您首先要弄清楚需要多少种独特的颜色(当您十字绣输出时,您不想要一堆仅用于每种大约三针的颜色)。
2) 将两张贴图(rgb2ind
的输出贴图和从 dcm 加载到 rgb 文件的贴图)转换为适当的色彩空间(我使用 HSV,因为我感觉很懒) ,L*a*b
可能更好)。
3) 通过检查哪些索引颜色具有最多的像素来选择颜色,选择最接近的颜色,然后从候选列表中删除该颜色,这样我们最终会得到 64 或其他颜色
% use histogram and sorting - assign colours to most common values first
[plist pbins] = hist(I_ind(:),0:63);
[plist_sorted, sort_ind] = sort(plist, 'descend');
% old_map = the output of rbg2ind
% new_map = the new one we're about to make
% dcm_map = (copy of!) the dcm map in the same colorspace
new_map = zeros(size(old_map));
% loop through from most to least common, remove a colour from the dcm map if we've used it.
for n = 1:sort_ind
D = pdist2(old_map(n,:),dcm_map);
m = find(D==min(D),1,'first');
new_map(n,:) = dcm_map(m,:);
dcm_map(m,:) = [];
end
我使用了你在这个问题上使用过的图片。因为它来自 rgb2ind
:
最终它有 64 种 DCM 颜色(有点偏差,可能是因为我的比较选择是错误的,但保证有 64 种单独的 DCM 颜色)。
我想您需要找到的是不同因素的正确权重(您可以轻松地将权重函数放入 pdist2
中)。例如,将 HSV 加权为 [0.8, 0.1, 0.1] 给了我这个辉煌的疯狂:
关于image - 十字绣到 Matlab,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27253260/
在 Matlab 中,您可以选择创建新的“示例”脚本文件以及脚本、函数、类等。创建它们时,它们会获得一个脚本图标。 它们与其他标准脚本文件的处理方式有何不同? 是否有关于这些示例脚本类型的预期用途的文
我正在运行一个不是我自己编写的大 m 文件,它依赖于某些子函数。我想知道是否在所有嵌套函数的任何地方都使用了特定函数(在我的例子中是函数 eig.m(计算特征值))。有没有快速的方法来做到这一点? 亲
Matlab中有一个函数叫 copulafit .我怎样才能看到这个函数背后的代码?许多 Python 的 numpy 和 scipy 函数在 Github 上很容易开源,但由于某种原因我在 Gith
我定义了一个抽象基类measurementHandler < handle它定义了所有继承类的接口(interface)。这个类的两个子类是a < measurementHandler和 b < me
假设有一个矩阵 A = 1 3 2 4 4 2 5 8 6 1 4 9 例如,我有一个 Vector 包含该矩阵每一列的“类”
我有一个在后台运行的 Matlab 脚本。随着计算的进行,它会不断弹出进度栏窗口。这很烦人。 问题是我没有自己写 Matlab 脚本,这是一段很长很复杂的代码,我不想搞砸。那么如何在不修改 Matla
有没有办法从一个 matlab 程序中检测计算机上正在运行多少个 matlab 进程? 我想要恰好有 n 个 matlab 进程在运行。如果我的数量太少,我想创建它们,如果数量太多,我想杀死一些。您当
我正在测试我们在 Matlab 中开发的一个独立应用程序,当时我注意到它的内存使用量(根据 Windows 任务管理器)达到了 16gb 以上的数倍峰值。我决定在编译版本后面的脚本上使用 profil
我面临着一个相当棘手的问题。在 Matlab 中,命令 S = char(1044) 将俄语字母 д 放入变量 S。但是 disp(S) 返回空白符号,尽管内容实际上是正确的: >> S = char
我在这行 MATLAB 代码中遇到内存不足错误: result = (A(1:xmax,1:ymax,1:zmax) .* B(2:xmax+1,2:ymax+1,2:zmax+1) +
我正在寻找一种在 MATLAB 中比较有限顺序数据与非确定性顺序的方法。基本上,我想要的是一个数组,但不对包含的元素强加顺序。如果我有对象 a = [x y z]; 和 b = [x z y]; 我希
我有一个由 1 和 0 组成的二维矩阵。 mat = [0 0 0 0 1 1 1 0 0 1 1 1 1 1 0 0 1 0 0 0 1 0 1 1 0 0 1]; 我需
我可以在 Matlab 中用一组 x,y 点绘制回归线。但是,如果我有一组点(如下图),假设我有四组点,我想为它们绘制四条回归线……我该怎么做?所有的点都保存在 x,y 中。没有办法将它们分开并将它们
我正在尝试使用以下代码在 MATLAB 中绘制圆锥体。但是,当 MATLAB 生成绘图时,曲面中有一个间隙,如下图所示。谁能建议关闭它的方法? clearvars; close all; clc; [
我有一个 map称为 res_Map,包含一组不同大小的数组。我想找到用于存储 res_Map 的总内存。 正如您在下面看到的,看起来 res_Map 几乎不占用内存,而 res_Map 中的各个元素
有没有办法在 MATLAB 中组合 2 个向量,这样: mat = zeros(length(C),length(S)); for j=1:length(C) mat(j,:)=C(j)*S;
已结束。此问题不符合 Stack Overflow guidelines 。它目前不接受答案。 我们不允许提问寻求书籍、工具、软件库等的推荐。您可以编辑问题,以便用事实和引用来回答它。 关闭 5 年前
我正在尝试将MatLab中的t copula适配到我的数据,并且我的功能是: u = ksdensity(range_1, range_1,'function','cdf'); v = ksdens
大家好,我目前正在尝试使用论文“多尺度形态学图像简化”中的 SMMT 运算符 Dorini .由于没有订阅无法访问该页面,因此我将相关详细信息发布在这里: 请注意,我将相关文章的部分内容作为图片发布。
我在MATLAB中编写代码,需要使用一个名为modwt的函数,该函数同时存在于两个我同时使用的工具箱(Wavelet和WMTSA)中。问题在于,一个版本仅返回一个输出,而另一个版本则返回三个输出。我应
我是一名优秀的程序员,十分优秀!