我有一个相当模糊的数独谜题的432x432图像,其自适应阈值不好(取5x5像素的块大小,然后减去2):

正如你所看到的,数字略有扭曲,其中有很多破损,而且有5s融入6s和6s融入8s.此外,还有很多噪音.为了修复噪声,我必须使用高斯模糊使图像更加模糊.然而,即使是相当大的高斯内核和自适应阈值blockSize(21x21,减去2)也无法消除所有断点并将数字融合在一起甚至更多:

我还尝试在阈值处理后扩展图像,这与增加blockSize有类似的效果; 并且锐化图像,这在某种程度上没有太大作用.我还应该尝试什么?
这是原始图像.
我在图像上的过滤器.
我正在改变图像的对比度.
dst.convertTo(dst, -1, 2, 0);
Run Code Online (Sandbox Code Playgroud)
然后使用高斯模糊进行平滑.
cv::GaussianBlur(dst,result,cv::Size(0,0),3);
cv::addWeighted(dst, 1.5, result, -0.5, 0, result);
Run Code Online (Sandbox Code Playgroud)
我该怎么做才能对我的形象产生这种影响?
UPDATE
直方图均衡后 -
vector<Mat> channels;
Mat img_hist_equalized;
cvtColor(dst, img_hist_equalized, CV_BGR2YCrCb);
split(img_hist_equalized,channels);
equalizeHist(channels[0], channels[0]);
merge(channels,img_hist_equalized);
cvtColor(img_hist_equalized, img_hist_equalized, CV_YCrCb2BGR);
Run Code Online (Sandbox Code Playgroud)
我有低对比度图像分割的问题.任务是找到表面缺陷.它们是可见的(缺陷总是暗区)但图像的对比度非常低.以下两个样本.

我尝试过增强对比度然后进行阈值处理:
Mat tmp1 = imread("C:\\framesRoi\\311.bmp",0);
stretchContrast(tmp1);
threshold(tmp1,tmp1,75,255,THRESH_BINARY);
Run Code Online (Sandbox Code Playgroud)
拉伸对比度的地方:
int minValue = 255, maxValue = 0;
const int l = sourceImg.cols * sourceImg.rows * sourceImg.channels();
if(sourceImg.isContinuous())
{
uchar* ptr = sourceImg.ptr<uchar>(0);
for(int i = 0; i < l; ++i)
{
if(ptr[i] < minValue)
{
minValue = ptr[i];
}
if(ptr[i] > maxValue)
{
maxValue = ptr[i];
}
}
}
cout<<"min: "<<minValue<<";"<<"max value: "<<maxValue<<endl;
const int magicThreshold = 10;
if(sourceImg.isContinuous())
{
uchar* ptr = sourceImg.ptr<uchar>(0);
for(int i = 0; i < l; …Run Code Online (Sandbox Code Playgroud) 我想将png图片的大小从476x402调整为439x371,我使用了PIL(image)或opencv的调整大小方法,但是,它会损失一些清晰度。调整大小后,图片变得模糊。如何使用 python 调整(缩小)图像而不丢失清晰度?
from skimage import transform, data, io
from PIL import Image
import os
import cv2
infile = 'D:/files/script/org/test.png'
outfile = 'D:/files/script/out/test.png'
''' PIL'''
def fixed_size1(width, height):
im = Image.open(infile)
out = im.resize((width, height),Image.ANTIALIAS)
out.save(outfile)
''' open cv'''
def fixed_size2(width, height):
img_array = cv2.imread(infile)
new_array = cv2.resize(img_array, (width, height), interpolation=cv2.INTER_CUBIC)
cv2.imwrite(outfile, new_array)
def fixed_size3(width, height):
img = io.imread(infile)
dst = transform.resize(img, (439, 371))
io.imsave(outfile, dst)
fixed_size2(371, 439)
Run Code Online (Sandbox Code Playgroud)
来源:476x402

调整大小:439x371

我正在使用Epson Perfection V700扫描仪,并在使用他们的工具进行扫描时选择以下选项:
这会产生这样的图像:

现在我的问题是 - 我实际上需要使用TWAIN .Net与此扫描仪进行交互,当我这样做时,我得到的图像是这样的:

旁白:我取消选择前面提到的两个选项并再次使用Epson进行扫描,得到的图像非常类似于我通过TWAIN获得的图像.
所以我认为也许这些是我可以在图像上自己完成的后期处理步骤(也许它们是以某种方式在硬件中完成的,我不知道).
我正在使用EmguCV,所以我首先创建了一个应用ICM的扩展方法(我很难找到这个的任何文档,所以这是一个猜测,也许我马上就错了,但我从这里得到的信息:位图转换类似乎对图像产生了影响):
public static Image<Bgr, TDepth> ApplyIcm<TDepth>(
this Image<Bgr, TDepth> source,
string sourceIcm,
string targetIcm)
where TDepth : new()
{
var target = source.CopyBlank();
using (source)
{
using (var b = source.Bitmap)
{
using (var memory = new MemoryStream())
{
b.Save(memory, ImageFormat.Bmp);
memory.Position = 0;
var bitmapImage = new BitmapImage();
bitmapImage.BeginInit();
bitmapImage.StreamSource = memory;
bitmapImage.CacheOption = BitmapCacheOption.OnLoad;
bitmapImage.EndInit();
var …Run Code Online (Sandbox Code Playgroud) 一个基本的Google搜索会找到这个SO问题,什么似乎是一个很好的答案。但是,当我尝试时,它对锐化模糊的图像完全没有效果。
有人可以弄清楚我做错了什么吗?
到目前为止,我要做的是在图像上实现filter2D函数以消除随机噪声,这也模糊了我的周期性噪声,这非常好。现在,我已经消除了噪点,现在我想对图像进行锐化处理,以使其看起来比原始图像的噪点少。这是我的代码:-
anchor = Point( -1, -1 );
delta = 0;
ddepth = -1;
dst = frame;
dst2 = image;
filter2D(src, dst, ddepth , kernel, anchor, delta, BORDER_DEFAULT );
cv::GaussianBlur(frame, image, cv::Size(0, 0), 11);
cv::addWeighted(frame, 1.5, image, -0.5, 0, image);
Run Code Online (Sandbox Code Playgroud)
该高斯模糊和addWeighted使NO差异的图像任何责任。另外,为了澄清,也没有任何代码错误。
我的问题很简单.我对中值滤波的灰度图像进行了Sobel滤波.索贝尔滤波后的图像是
![纹理地板中的矩形物体]![纹理地板中的矩形物体]](https://i.stack.imgur.com/iUB3O.jpg)
矩形物体是我感兴趣的.我试图从图像中提取它.
如您所见,与物体一起,由于地板的纹理,会产生更多噪音.因此,边缘图像如下(具有更多的假边缘)

索贝尔过滤后如何消除噪音?或者我如何克服这个障碍?
您的建议或指导将帮助我理解图像处理及其挑战.
谢谢
我的 python 代码在图像上找不到棋盘。我使用此代码来解决此任务:
import numpy as np
import cv2
import glob
# termination criteria
criteria = (cv2.TERM_CRITERIA_EPS + cv2.TERM_CRITERIA_MAX_ITER, 30, 0.001)
# prepare object points, like (0,0,0), (1,0,0), (2,0,0) ....,(6,5,0)
a = 7
b = 6
objp = np.zeros((b*a,3), np.float32)
objp[:,:2] = np.mgrid[0:a,0:b].T.reshape(-1,2)
# Arrays to store object points and image points from all the images.
objpoints = [] # 3d point in real world space
imgpoints = [] # 2d points in image plane.
images = glob.glob('*.jpg')
for fname …Run Code Online (Sandbox Code Playgroud) 我想像 Adobe Photoshop 一样应用不清晰的蒙版,我知道这个答案,但它不如 Photoshop 清晰。
Photoshop 在 Smart Sharpen 对话框中有 3 个参数:Amount、Radius、Reduce Noise;我想实现所有这些。

根据 SO 中的各种来源,这是我编写的代码。但是在某些阶段(“blurred”、“unsharpMask”、“highContrast”)结果很好,但在最后阶段(“retval”)结果不好。
我哪里错了,我应该改进什么?
是否可以在性能方面改进以下算法?
#include "opencv2/opencv.hpp"
#include "fstream"
#include "iostream"
#include <chrono>
using namespace std;
using namespace cv;
// from https://docs.opencv.org/3.4/d3/dc1/tutorial_basic_linear_transform.html
void increaseContrast(Mat img, Mat* dst, int amountPercent)
{
*dst = img.clone();
double alpha = amountPercent / 100.0;
*dst *= alpha;
}
// from /sf/answers/41737041/
float luminanceAsPercent(Vec3b color)
{
return (0.2126 * color[2]) + (0.7152 * color[1]) + (0.0722 * color[0]);
}
// …Run Code Online (Sandbox Code Playgroud)