对于以下代码
# Numerical operation
SN_map_final = (new_SN_map - mean_SN) / sigma_SN
# Plot figure
fig12 = plt.figure(12)
fig_SN_final = plt.imshow(SN_map_final, interpolation='nearest')
plt.colorbar()
fig12 = plt.savefig(outname12)
Run Code Online (Sandbox Code Playgroud)
与new_SN_map作为一维数组,mean_SN并sigma_SN为常数,我碰到下面的错误.
Traceback (most recent call last):
File "c:\Users\Valentin\Desktop\Stage M2\density_map_simple.py", line 546, in <module>
fig_SN_final = plt.imshow(SN_map_final, interpolation='nearest')
File "c:\users\valentin\appdata\local\enthought\canopy\user\lib\site-packages\matplotlib\pyplot.py", line 3022, in imshow
**kwargs)
File "c:\users\valentin\appdata\local\enthought\canopy\user\lib\site-packages\matplotlib\__init__.py", line 1812, in inner
return func(ax, *args, **kwargs)
File "c:\users\valentin\appdata\local\enthought\canopy\user\lib\site-packages\matplotlib\axes\_axes.py", line 4947, in imshow
im.set_data(X)
File "c:\users\valentin\appdata\local\enthought\canopy\user\lib\site-packages\matplotlib\image.py", line 453, in set_data
raise TypeError("Invalid …Run Code Online (Sandbox Code Playgroud) 在隐写术中,最低有效位(LSB)替换方法将秘密位嵌入来自覆盖介质的位的位置,例如图像像素.在一些方法中,采用图像的离散小波变换(DWT)并且将秘密比特嵌入DWT系数中,之后使用逆变换来重建隐秘图像.
但是,DWT产生浮点系数,对于LSB替换方法,需要整数值.我读过的大多数论文都使用2D Haar Wavelet,但他们的方法并不清楚.我已经看到变换是根据低通和高通滤波器(浮点变换)定义的,或者是取对值的和与差,或者平均值和平均值之差等.
更明确地,无论是正向变换还是反向变换(但不一定取决于所使用的公式),最终将出现浮点数.我不能将它们用于系数,因为替换不起作用,我不能将它们用于重建的像素,因为图像需要整数值来存储.
例如,让我们考虑一对像素,A并B作为一维数组.低频系数由和,即s = A + B高频系数和差值定义,即d = A - B.然后我们可以用B = (s - d) / 2和重建原始像素A = s - B.然而,在任何与系数混合的位之后,s - d可能不再是偶数,并且浮点值将出现用于重建的像素.
对于2D情况,1D变换分别应用于行和列,因此最终会在某处出现4除法.这可能导致具有浮动余数.00,.25,.50和.75的值.我只遇到过一篇解决这个问题的论文.其余的方法都很模糊,我很难复制它们.然而,DWT已经广泛用于图像隐写术.
我的问题是,既然我读过的一些文献没有启发,那怎么可能呢?如何使用引入浮点值的变换,但整个隐写方法需要整数?
我正在尝试使用python实现JPEG压缩.当我尝试对tiff图像应用DCT,量化,IDCT过程时,我发现scipy.fftpack.dct/idct有些奇怪.
由于scipy包中只有1D dct/idct,所以我正在为2D dct做这个
import numpy as np
from scipy.fftpack import dct, idct
def dct2(block):
return dct(dct(block.T).T)
def idct2(block):
return idct(idct(block.T).T)
Run Code Online (Sandbox Code Playgroud)
我使用简单的3x3矩阵测试了2D dct/idct.我希望在这个测试用例中得到一个True矩阵.
a = np.random.randint(0,255,9).reshape(3,3)
print a == idct2(dct2(a))
Run Code Online (Sandbox Code Playgroud)
然而事实证明,在idct2(dct2(a))之后,结果通过与原始矩阵相比的常数因子来缩放.
我想问一下是否有办法实现一组2D dct/idct,这样在idct(dct(a))操作之后我可以获得与输入相同的输出.
我有一个数据类型的图像int16。因此,当我不得不将其范围转换为0-255时,我有两种方法可以在Python中实现。
1)numpy.uint8直接使用功能
2)cv2.normalize在0-255范围内使用OpenCV 功能,然后使用numpy.uint8。
在Matlab中,我们直接使用uint8函数进行转换。在
同样在第二种情况下,我使用NORM_MINMAX并将强度值的范围更改为0-4。
进行转换的正确方法是什么?
对于我的研究项目,我需要修改 png 文件中的一些字节。
这是用于隐写术项目,我必须稍微修改一个字节并隐藏照片中的消息。
在下面的代码中,当我运行它时,它将每个字节都变为 0 并且文件被破坏。在 bmp 文件中它可以工作,但我不知道如何在 png 格式中做到这一点。
不幸的是我无法使用任何第三方库。我只需要帮助如何正确读取每个字节,然后使用 C++ 对其进行修改。感谢帮助。
string path = "C:\\Users\\sth....";
fstream file(path, ios::binary | ios::in | ios::out);
char buffer[1000];
file.seekp(300);
file << char(0);
file.read(buffer, 1000);
for(char c : buffer)
cout << int(c) << " ";
Run Code Online (Sandbox Code Playgroud) 我得到了错误的答案:
long(math.factorial(100)) % long(math.pow(12, 48))
Run Code Online (Sandbox Code Playgroud)
答案应为0,但Python给出:
3533293188234793495632656292699172292923858530336768L
Run Code Online (Sandbox Code Playgroud)